// Another stat keeper... this one for all items in the // game hopefully. - Radix 1996 // Version 1.0 inherit "/std/object.c"; #define SAVE "/save/" mapping container_data, armour_data, weapon_data; // Pouches, backpacks, ... mapping query_container_data() { return container_data; } // Armours... mapping query_armour_data() { return armour_data; } // Weapons... mapping query_weapon_data() { return weapon_data; } int query_prevent_shadow(object o) { return 1; } void load_this_ob() { restore_object(SAVE+"item_info"); } void save_this_ob() { save_object(SAVE+"item_info",1); } create() { object::create(); container_data = ([ ]); weapon_data = ([ ]); armour_data = ([ ]); load_this_ob(); seteuid("Root"); } dest_me() { save_this_ob(); destruct(this_object()); } string crop_string(string longpa, int howlong) { string shorter; shorter = longpa[sizeof(longpa)-howlong..sizeof(longpa)]; return shorter; } // Called from /global/creator/cmds/qc.c int query_qc_perms(string name) { string *rights = ({ "taniwha","kodiak" }); rights += ({ "/d/aprior/master"->query_dom_lord() }); return member_array(name, rights) != -1; } // Called from /global/creator/cmds/info.c int query_info_perms(string name, object obj) { string dom = domain_origin(obj); mixed mas; if(!dom) return 0; // /w/creator won't have data anyway mas = "/d/"+dom+"/master"; return mas->valid_write(explode(real_filename(obj),"/"),name,0); } void display_item_properties(object ob) { mapping m; int i; m = ob->query_properties(); if(!sizeof(keys(m))) return ; write("Properties:\n "); for(i=0; i<sizeof(keys(m)); i++) write(keys(m)[i]+" : "+m[keys(m)[i]]+"\n "); write("\n"); return; } /* container_data mapping: ([ "domain" : ([ "path" : ({ max_weight, enchant, qc'ed, qc'ed by, comments }) ]) ]) */ void update_container(object ob) { mapping obmap = ([ ]); mixed tmp = ({ }); int caught = 0; string dom, file; if(!ob) return; dom = domain_origin(ob); file = real_filename(ob); if(!dom || !file) return; obmap = container_data[dom]; if(!m_sizeof(obmap)) obmap = ([ ]); tmp = obmap[file]; if(!sizeof(tmp)) { tmp = allocate(5); tmp[0] = ob->query_max_weight(); tmp[1] = ob->query_enchant(); tmp[2] = 0; tmp[3] = 0; tmp[4] = 0; obmap[file] = tmp; container_data[dom] = obmap; save_this_ob(); return; } if(tmp[0] != ob->query_max_weight()) caught = 1; if(tmp[1] != ob->query_enchant()) caught = 1; if(caught) { tmp[2] = 0; tmp[3] = 0; obmap[file] = tmp; container_data[dom] = obmap; save_this_ob(); } return; } // Called from /global/creator/cmds/qc.c void qc_item_container(object ob) { mapping obmap = ([ ]); mixed tmp = ({ }); int caught = 0; string dom, file; if(!ob) return; dom = domain_origin(ob); file = real_filename(ob); if(!dom || !file) return; obmap = container_data[dom]; if(!m_sizeof(obmap)) obmap = ([ ]); tmp = obmap[file]; if(!sizeof(tmp)) { write("ERROR: Container has no data!\n"); return; } tmp[2] = 1; tmp[3] = geteuid(this_player()); obmap[file] = tmp; container_data[dom] = obmap; save_this_ob(); write("File: "+file+" now QCed.\n"); return; } void info_item_container(object ob) { mapping obmap = ([ ]); mixed tmp = ({ }); int caught = 0; string dom, file; if(!ob) return; dom = domain_origin(ob); file = real_filename(ob); if(!dom || !file) return; obmap = container_data[dom]; if(!m_sizeof(obmap)) obmap = ([ ]); tmp = obmap[file]; if(!sizeof(tmp)) { write("ERROR: Container has no data!\n"); return; } write("Filename: "+file+"\n"+ "Max weight: "+tmp[0]+"\n" "Enchant: "+tmp[1]+"\n" "QCed: "); if(tmp[2]) write("Yes \nQCed by: "+capitalize(tmp[3])+"\n"); else write("No\n"); write("Comments:\n "); if(tmp[4] == "NA") write("None.\n\n"); else write(tmp[4]+"\n\n"); return; } // Called from /global/creator/cmds/info.c void domain_item_containers(string dom) { string s; mixed obs, obmap; mixed tmp; int i; if(member_array(dom,get_dir("/d/")) == -1) { write(capitalize(dom)+" does not exist.\n"); return; } obmap = container_data[dom]; if(!obmap) obmap = ([ ]); obs = sort_array(keys(obmap),1); s = sprintf("%-40s %6s %6s %12s %6s\n", "Filename","Mx Wt","Enchnt","QCed by","Com'ed"); if(!sizeof(obs)) s+= sprintf("\nNo data.\n"); for(i=0; i<sizeof(obs); i++) { tmp = explode(obs[i],"/"); tmp = implode(tmp - ({ tmp[0], tmp[1] }),"/"); s+= sprintf("%-35s%5d%5d ", tmp, obmap[obs[i]][0], obmap[obs[i]][1]); s+= sprintf("%12s",obmap[obs[i]][3]); if(obmap[obs[i]][4]) s += sprintf("%5s","Yes"); s+= "\n"; } write(s); } /* weapon_data mapping: ([ "domain" : ([ "path" : ({ weight, enchant, rolls, dice, roll_add, twohanded, qc'ed by, comments }) ]) ]) */ void update_weapon(object ob) { mapping obmap = ([ ]); mixed tmp = ({ }); int caught = 0; string dom, file; int *dmg; if(!ob) return; dom = domain_origin(ob); file = real_filename(ob); if(!dom || !file) return; obmap = weapon_data[dom]; if(!m_sizeof(obmap)) obmap = ([ ]); tmp = obmap[file]; dmg = ob->query_damage_vals(); if(!sizeof(tmp)) { tmp = allocate(8); tmp[0] = ob->query_weight(); tmp[1] = ob->query_enchant(); tmp[2] = dmg[0]; tmp[3] = dmg[1]; tmp[4] = dmg[2]; tmp[5] = ob->query_twohanded(); tmp[6] = 0; tmp[7] = 0; obmap[file] = tmp; weapon_data[dom] = obmap; save_this_ob(); return; } if(tmp[0] != ob->query_weight()) caught = 1; if(tmp[1] != ob->query_enchant()) caught = 1; if(tmp[2] != dmg[0]) caught = 1; if(tmp[3] != dmg[1]) caught = 1; if(tmp[4] != dmg[2]) caught = 1; if(tmp[5] != ob->query_twohanded()) caught = 1; if(caught) { tmp[6] = 0; obmap[file] = tmp; weapon_data[dom] = obmap; save_this_ob(); } return; } // Called from /global/creator/cmds/qc.c void qc_weapon(object ob) { mapping obmap = ([ ]); mixed tmp = ({ }); int caught = 0; string dom, file; if(!ob) return; dom = domain_origin(ob); file = real_filename(ob); if(!dom || !file) return; obmap = weapon_data[dom]; if(!m_sizeof(obmap)) obmap = ([ ]); tmp = obmap[file]; if(!sizeof(tmp)) { write("ERROR: Weapon has no data!\n"); return; } tmp[6] = geteuid(this_player()); obmap[file] = tmp; weapon_data[dom] = obmap; save_this_ob(); write("File: "+file+" now QCed.\n"); return; } void info_weapon(object ob) { mapping obmap = ([ ]); mixed tmp = ({ }); int caught = 0; string dom, file; if(!ob) return; dom = domain_origin(ob); file = real_filename(ob); if(!dom || !file) return; obmap = weapon_data[dom]; if(!m_sizeof(obmap)) obmap = ([ ]); tmp = obmap[file]; if(!sizeof(tmp)) { write("ERROR: Weapon has no data!\n"); return; } write("Filename: "+file+"\n"+ "Weight : "+tmp[0]+"\n" "Enchant : "+tmp[1]+"\n" "Damage : "+tmp[2]+"d"+tmp[3]+"+"+tmp[4]+"\n" "Hands : "); if(ob->query_twohanded()) write("2\n"); else write("1\n"); write("QCed : "); if(tmp[6]) write("Yes \nQCed by: "+capitalize(tmp[6])+"\n"); else write("No\n"); if(!tmp[5]) if(file_size(file+".comments") > 0) write(read_file(file+".comments")+"\n\n"); else write("None.\n\n"); else write(tmp[5]+"\n\n"); display_item_properties(ob); return; } // Called from /global/creator/cmds/info.c void domain_weapons(string dom) { string s; mixed obs, obmap; mixed tmp; int i; if(member_array(dom,get_dir("/d/")) == -1) { write(capitalize(dom)+" does not exist.\n"); return; } obmap = weapon_data[dom]; if(!obmap) obmap = ([ ]); obs = sort_array(keys(obmap),1); s = sprintf("%-40s %6s %6s %12s %6s\n", "Filename","Enchnt","Damage","QCed by","Com'ed"); if(!sizeof(obs)) s+= sprintf("\nNo data.\n"); for(i=0; i<sizeof(obs); i++) { tmp = explode(obs[i],"/"); tmp = implode(tmp - ({ tmp[0], tmp[1] }),"/"); s+= sprintf("%-40s%5d ", tmp, obmap[obs[i]][1]); s+= sprintf("%6s",obmap[obs[i]][2]+"d"+obmap[obs[i]][3]+"+"+ obmap[obs[i]][4]); if(obmap[obs[i]][6]) s+= sprintf("%12s",capitalize(obmap[obs[i]][6])); else s+= sprintf("%12s",""); if(obmap[obs[i]][7]) s += sprintf("%5s","Yes"); s+= "\n"; } this_player()->more_string(s); } /* armour_data mapping: ([ "domain" : ([ "path" : ({ weight, size, enchant, ac, qc'ed by, comments }) ]) ]) */ void update_armour(object ob) { mapping obmap = ([ ]); mixed tmp = ({ }); int caught = 0; string dom, file; if(!ob) return; dom = domain_origin(ob); file = real_filename(ob); if(!dom || !file) return; obmap = armour_data[dom]; if(!m_sizeof(obmap)) obmap = ([ ]); tmp = obmap[file]; if(!sizeof(tmp)) { tmp = allocate(6); tmp[0] = ob->query_weight(); tmp[1] = ob->query_size(); tmp[2] = ob->query_enchant(); tmp[3] = ob->query_ac(); tmp[4] = 0; tmp[5] = 0; obmap[file] = tmp; armour_data[dom] = obmap; save_this_ob(); return; } if(tmp[0] != ob->query_weight()) { caught = 1; tmp[0] = ob->query_weight(); } if(tmp[1] != ob->query_size()) { caught = 1; tmp[1] = ob->query_size(); } if(tmp[2] != ob->query_enchant()) { caught = 1; tmp[2] = ob->query_enchant(); } if(tmp[3] != ob->query_ac()) { caught = 1; tmp[3] = ob->query_ac(); } if(caught) { if(this_player() && this_player()->query_creator() && tmp[4]) write("\nThis item needs to be QCed again.\n"); tmp[4] = 0; obmap[file] = tmp; armour_data[dom] = obmap; save_this_ob(); } return; } // Called from /global/creator/cmds/qc.c void qc_armour(object ob) { mapping obmap = ([ ]); mixed tmp = ({ }); string dom, file; if(!ob) return; dom = domain_origin(ob); file = real_filename(ob); if(!dom || !file) return; obmap = armour_data[dom]; if(!m_sizeof(obmap)) obmap = ([ ]); tmp = obmap[file]; if(!sizeof(tmp)) { write("ERROR: Armour has no data!\n"); return; } tmp[4] = geteuid(this_player()); obmap[file] = tmp; armour_data[dom] = obmap; save_this_ob(); write("File: "+file+" now QCed.\n"); return; } // Called from /global/creator/cmds/info.c void info_armour(object ob) { mapping obmap = ([ ]); mixed tmp = ({ }); string dom, file; if(!ob) return; dom = domain_origin(ob); file = real_filename(ob); if(!dom || !file) return; obmap = armour_data[dom]; if(!m_sizeof(obmap)) obmap = ([ ]); tmp = obmap[file]; if(!sizeof(tmp)) { write("ERROR: Armour has no data!\n"); return; } write("Filename: "+file+"\n"+ "Weight : "+tmp[0]+"\n" "Size : "+tmp[1]+"\n" "Enchant : "+tmp[2]+"\n" "AC : "+tmp[3]+"\n" "QCed : "); if(tmp[4]) write("Yes \nQCed by : "+capitalize(tmp[4])+"\n"); else write("No\n"); write("Comments:\n "); if(!tmp[5]) if(file_size(file+".comments") > 0) write(read_file(file+".comments")+"\n\n"); else write("None.\n\n"); else write(tmp[5]+"\n\n"); display_item_properties(ob); return; } // Called from /global/creator/cmds/info.c void domain_armours(string dom) { string s; mixed obs, obmap; mixed tmp; int i; if(member_array(dom,get_dir("/d/")) == -1) { write(capitalize(dom)+" does not exist.\n"); return; } obmap = armour_data[dom]; if(!obmap) obmap = ([ ]); obs = sort_array(keys(obmap),1); s = sprintf("%-40s%4s%4s%4s%5s%12s%10s\n", "Filename","Wt","Sz","AC","Ench","QCed by","Commented"); if(!sizeof(obs)) s+= sprintf("\nNo data.\n"); for(i=0; i<sizeof(obs); i++) { tmp = explode(obs[i],"/"); tmp = implode(tmp - ({ tmp[0], tmp[1] }),"/"); s+= sprintf("%-40s%4d",tmp, obmap[obs[i]][0]); s+= sprintf("%4d%4d",obmap[obs[i]][1],obmap[obs[i]][3]); s+= sprintf("%5d",obmap[obs[i]][2]); if(stringp(obmap[obs[i]][4])) s+= sprintf("%12s",capitalize(obmap[obs[i]][4])); else s+= sprintf("%12s",""); if(stringp(obmap[obs[i]][5])) s+= sprintf("%10s","Yes"); else s+= sprintf("%10s","No"); s+= "\n"; } this_player()->more_string(s); }