内存对象数检查
来源:互联网 发布:linux网络运维是什么 编辑:程序博客网 时间:2024/06/05 22:39
E:\kebie\game_os\BIN4\cmd\god\testeff.c
#include <ansi.h>#include <skill.h>#include <action.h>#include <effect.h>#define DEBUG(arg) log_file("test_monster.txt",sprintf("%s %s\n", short_time(time()), arg));// 函数:命令处理int main( object me, string arg ){ int i, size, a1, a2, a3, a4, mem=0, flag=0; int * number = ({ 0, 0, 0, 0, 0, 0 }); int * shape = ({ 0, 0, 0, 0, 0, 0 }); int * level = ({ 0, 0, 0, 0, 0, 0 }); string * namelist = ({ " ", " ", " ", " ", " ", " " }); string * fam = ({ " ", " ", " ", " ", " ", " " });object * temp, org, who;string what;if (!arg){return 1;}//只列示某玩家所属的对象if( 1 == sscanf(arg, "monster %d", what) ) //列示指定ID的怪物对象{ flag = 2;}else if(2 == sscanf(arg, "%s %s", arg, what)){ if(who = find_any_char(what)) flag = 1;}if(flag == 2) temp = children("npc/npc/monster");else temp = children(arg);size = sizeof(temp);if (size>0){for (i=0;i<size;i++){if (objectp(temp[i])) // && get_x(temp[i])>0{mem += memory_info(temp[i]);if( flag == 1 ){if( temp[i]->get_owner() == who ){tell_user(me, sprintf("%d: %x# %d %d %d", i+1, getoid(temp[i]), get_z(temp[i]), get_x(temp[i]), get_y(temp[i]), ));DEBUG(sprintf("%d: %x# %d %d %d", i+1, getoid(temp[i]), get_z(temp[i]), get_x(temp[i]), get_y(temp[i]), ))}}if( flag == 2 ){if( temp[i]->get_npc_id() == what ){tell_user(me, sprintf("%d: %x# %d %d %d", i+1, getoid(temp[i]), get_z(temp[i]), get_x(temp[i]), get_y(temp[i]), ));DEBUG(sprintf("%d: %x# %d %d %d", i+1, getoid(temp[i]), get_z(temp[i]), get_x(temp[i]), get_y(temp[i]), ))}}else{tell_user(me, sprintf("%d: %x# %d %d %d", i+1, getoid(temp[i]), get_z(temp[i]), get_x(temp[i]), get_y(temp[i]), ));DEBUG(sprintf("%d: %x# %d %d %d", i+1, getoid(temp[i]), get_z(temp[i]), get_x(temp[i]), get_y(temp[i]), ))}}}} //tell_user( me, "Memory: %O, %s (%d).", arg, "cmd/sys/mem"->byte_expression(mem), mem );tell_user(me, "ok"); DEBUG("ok") return 1;}
E:\kebie\game_os\BIN4\cmd\god\item_mem.c
/* ******内存中物品对象监控命令********** * item_mem testeff 列印所有物品对象 对应LOG文件:item_have_owner.txt和item_no_owner.txt * item_mem count 列印所有物品对象各种所属关系的数量占用情况 * item_mem count_2 包括count的功能,并且会列印出每一个无主物品对象的情况*/#define DEBUG_1(me, arg) {tell_user(me, arg); log_file("item_mem.txt",sprintf("%s %s\n", short_time(time()), arg));}#define DEBUG_2(me, arg) {log_file("item_mem.txt",sprintf("%s %s\n", short_time(time()), arg));}string *what=({"/item/weapon", "/inh/item/item", "/item/gem.c","/npc/npc/pet.c",});int type = 1; //默认不打印到前台int set_type(int i) { return type = i; }int get_type() { return type; }void write_log(object me, string arg){ if( type == 1 ) DEBUG_1(me, arg) else if( type == 2 ) DEBUG_2(me, arg)}int testeff_123( object me, string arg ){ int i, size;object *temp, owner;if (!arg){return 1;}temp = children(arg);size = sizeof(temp);if (size>0){for (i=0;i<size;i++){if (objectp(temp[i])){if( (owner = temp[i]->get_owner()) && owner->is_user() ){log_file("item_have_owner.txt", sprintf("%s %d: %s#%x owner:%s %s(%d)\n", short_time(time()), i+1, arg, getoid(temp[i]) , owner->get_id(), owner->get_name(), owner->get_number()));}else{ log_file("item_no_owner.txt", sprintf("%s %d: %s#%x %d %d(%d,%d) %O\n", short_time(time()), i+1, arg, getoid(temp[i])/*, temp[i]->get_name()*/, temp[i]->get_item_id(), get_z(temp[i]), get_x(temp[i]), get_y(temp[i]), temp[i]->get_save_dbase_2()));}}}} tell_user(me, sprintf("%s ok temp:%O", arg,temp)); return 1;}//获得子对象数量int get_size( object me, string arg ){ int i, size;object * temp, owner;if (!arg){return 0;}temp = children(arg);size = sizeof(temp); return size;}//获得子对象集合object *get_items( object me, string arg ){ int i, size;object * temp, owner;if (!arg){return ({});}temp = children(arg); return copy(temp);}// 函数:命令处理int main( object me, string arg ){ int i, j, size, all, all0, all1, all2, all3, all4, all5, all6, all7, all8, num, *types; object *users, who, *inv, *pet, *all_item, *items, owner; string str; if (!arg){return 1;}reset_eval_cost();if( arg == "testeff" ){ size = sizeof(what); for(i=0; i<size; i++) { if( what[i] && what[i]!="" ) testeff_123(me, what[i]); }}else if(arg == "count") //统计当前物品对象数量占用情况{ write_log(me, sprintf("\ncount")); //所有的道具对象 size = sizeof(what); all = 0; for(i=0; i<size; i++) { if( what[i] && what[i]!="" ) { all1 = get_size(me, what[i]); all += all1; write_log(me, sprintf("%s:%d", what[i], all1)); } } write_log(me, sprintf("all:%d", all)); //玩家身上 all0 = 0;users = SYS_USER_D->get_user();write_log(me, sprintf("user_size:%d", sizeof(users)));foreach( who in users ){if( !objectp(who) ) continue;inv = who->get_all_inventory_del() - ({ 0 });all2 = sizeof(inv);// inv = who->get_shop_dbase();// all3 = sizeof(inv);all3 = 0;inv = who->get_all_equip() - ({ 0 });all4 = sizeof(inv);// inv = who->get_all_jade() - ({ 0 });// all6 = sizeof(inv);all6 = 0;pet = who->get_all_beast();all5 = 0;// for(i=0,size=sizeof(pet); i<size; i++)// {// if(objectp(pet[i]))// {// inv = pet[i]->get_all_equip() - ({ 0 });// all5 += sizeof(inv);// }// }//幻兽个数all7 = sizeof(pet);all8 = sizeof(who->get_all_cangku());all1 = who->get_sizeof_inventory() + who->get_sizeof_huntBag() + all4 + who->sizeof_store_item() + all2 + all3 + all5 + who->get_sizeof_NutsInBag() + who->get_sizeof_NutsUsed() + all6 + all7 + all8;write_log(me, sprintf("item_in_user:%s(%d) num=%d(bag=%d,huntbag=%d,equip=%d,nuts_bag=%d,nuts_use=%d,jade=%d,store=%d,shop_pet=%d,pet_equip=%d,del=%d,user_pet=%d,cangku_pet=%d)", who->get_name(), who->get_number(), all1, who->get_sizeof_inventory(),who->get_sizeof_huntBag(), all4, who->get_sizeof_NutsInBag(), who->get_sizeof_NutsUsed(), all6, who->sizeof_store_item(), all3, all5, all2,all7,all8));all0 += all1;}//离线玩家身上users = children("inh/user/user_quit");foreach( who in users ){if( !objectp(who) ) continue;all1 = who->sizeof_store_item();write_log(me, sprintf("item_in_user_quit:%s(%d) store=%d", who->get_name(), who->get_number(), all1));all0 += all1;}all -= all0;write_log(me, sprintf("item_in_user_all:%d remain=%d", all0, all));//贩卖inv = ({});types = SHOP_INFO->get_types();for(i=0, size=sizeof(types); i<size; i++){ inv += SHOP_INFO->get_Items(types[i]);}all0 = sizeof(inv);all -= all0;write_log(me, sprintf("shop:%d remain=%d", all0, all));//商城all0 = 0;for(i=1; i<10; i++){ inv = SHOP_D->get_shopItem_by_options(i); all0 += sizeof(inv);}all -= all0;write_log(me, sprintf("mart:%d remain=%d", all0, all));write_log(me, sprintf("master:%d remain=%d", 6, all-6));tell_user(me, "count ok.");}else if(arg == "count_2") //统计当前物品对象情况{ write_log(me, sprintf("\ncount_2")); //所有的道具对象 size = sizeof(what); all_item = ({}); for(i=0; i<size; i++) { if( what[i] && what[i]!="" ) { items = get_items(me, what[i]); all_item += items; } } write_log(me, sprintf("all_size:%d", sizeof(all_item))); //玩家身上 all0 = 0;users = SYS_USER_D->get_user();write_log(me, sprintf("user_size:%d", sizeof(users)));foreach( who in users ){if( !objectp(who) ) continue; str = "";inv = who->get_all_items() - ({ 0 });if(sizeof(inv)) all_item -= inv; all0 += sizeof(inv); str += sprintf("inventory=%d,", sizeof(inv)); inv = who->get_all_inventory_del() - ({ 0 });if(sizeof(inv)) all_item -= inv; all0 += sizeof(inv); str += sprintf("inventory_del=%d,", sizeof(inv));write_log(me, sprintf("user:%s(%d):%s", who->get_name(), who->get_number(), str));}//离线玩家身上users = children("inh/user/user_quit");foreach( who in users ){if( !objectp(who) ) continue;str = "";inv = who->get_store_item_dbase() - ({ 0 });if(sizeof(inv)) all_item -= inv;all0 += sizeof(inv);str += sprintf("store=%d,", sizeof(inv));write_log(me, sprintf("user_quit:%s(%d):%s", who->get_name(), who->get_number(), str));}write_log(me, sprintf("item_in_user_all_size:%d", all0));size = sizeof(all_item);write_log(me, sprintf("remain=%d,%O", size,all_item));num = 0;for(i=0; i<size; i++)if (objectp(all_item[i])){ /* * all_item[i]->get("create") 该物品的创建时间 * all_item[i]->get("previous") 该物品创建时的previous_object(-1) * all_item[i]->get("no_owner") 副本通关产出物品标记 */if( get_z(all_item[i]) || !getoid(all_item[i])){//write_log(me, sprintf("item_at_map_1 %d: %s#%x %s %d %s map:%d(%d,%d) %s %O", i+1, // get_file_name(all_item[i]), getoid(all_item[i]), all_item[i]->get_name(), all_item[i]->get_item_id(), all_item[i]->get("no_owner") , get_z(all_item[i]), get_x(all_item[i]), get_y(all_item[i]), all_item[i]->get_serial_id(), all_item[i]->get("previous")));}else if( (owner = all_item[i]->get_owner()) && owner->is_user() ){write_log(me, sprintf("item_have_owner_1 %d: %s#%x owner:%s %s(%d) %O", i+1, get_file_name(all_item[i]), getoid(all_item[i]) , owner->get_id(), owner->get_name(), owner->get_number(), all_item[i]->get("previous")));}else{ num += 1; write_log(me, sprintf("item_no_owner_1 %d: %s#%x %d %s %s %s %O", i+1, get_file_name(all_item[i]), getoid(all_item[i]), all_item[i]->get_item_id(), all_item[i]->get("no_owner"), all_item[i]->get_serial_id(), all_item[i]->get("create"), all_item[i]->get("previous")));}}write_log(me, sprintf("item_no_owner_1 num=%d", num));tell_user(me, sprintf("count_2 ok. remain %d.", num));} return 1;}
status
#include <map.h>// 说明:以下定义来自 f_others.c (GSE)#define DEFAULT_STATUS 0#define OBJECT_HASH_STATUS 1#define LIVING_OBJECT_STATUS 2#define HEART_BEAT_STATUS 3#define CALL_OUT_STATUS 4#define CACHE_STATUS 5// 函数:命令处理int main( object me, string arg ){ int i, size; if( is_player(me) ) { notify( "您没有足够的权限。" );return 1; } switch( arg ) { default : arg = game_status(DEFAULT_STATUS, 1); break;case "object" : arg = game_status(OBJECT_HASH_STATUS, 1); break;case "living" : arg = game_status(LIVING_OBJECT_STATUS, 1); break; case "heart" : arg = game_status(HEART_BEAT_STATUS, 1); break; case "call" : arg = game_status(CALL_OUT_STATUS, 1); break; case "cache" : arg = game_status(CACHE_STATUS, 1); break; case "all" : arg = game_status(DEFAULT_STATUS, 1) + "\n"; arg += game_status(OBJECT_HASH_STATUS, 1) + "\n"; arg += game_status(LIVING_OBJECT_STATUS, 1) + "\n"; arg += game_status(HEART_BEAT_STATUS, 1) + "\n"; arg += game_status(CALL_OUT_STATUS, 1) + "\n"; arg += game_status(CACHE_STATUS, 1); break;case "newbie" : for( i = NEWBIE_MAP_BEGIN, size = 0; i <= NEWBIE_MAP_END; i ++ ) if( get_map_max_x(i) && get_map_max_y(i) ) size ++; arg = sprintf("NEWBIE: %d", size); break; case "war" : for( i = BATTLE_MAP_BEGIN, size = 0; i <= BATTLE_MAP_END; i ++ ) if( get_map_max_x(i) && get_map_max_y(i) ) size ++; arg = sprintf("WAR: %d", size); break; } tell_user(me, "%s", arg);log_file(CMD_LOG,sprintf("%s %s(%s) status\n",short_time(),me->get_name(),me->get_id())); return 1;}
E:\kebie\game_os\BIN4\cmd\sys\view.c
// 函数:命令处理// 说明:列示载入对象统计信息int main( object me, string arg ){ object *items, *items2, *items3; object *char, *char2, *kind; object *npc, *npc2, *user; object *pet, *ground, *map, *build, *quit, *quit_data; int size, i;// if( is_player(me) ) // {// notify("Permission denied.");//return 1;// } reset_eval_cost(); items = objects(); tell_user( me, sprintf("Memory: %s Object: %d", MEM_CMD->byte_expression( memory_info() ), sizeof(items)) ); tell_user( me, sprintf("Process: %s", get_load_average()) );// char2 = filter_array( items, (: $1->is_char() :) ); // objects( (: $1->is_char() :) ); kind = filter_array( items, (: !clonep($1) :) ); reset_eval_cost(); char = filter_array( items, (: clonep($1) :) ); reset_eval_cost(); npc = filter_array( char, (: $1->is_npc() :) ); reset_eval_cost(); user = filter_array( char, (: $1->is_user() :) ); reset_eval_cost(); pet = filter_array( char, (: $1->is_pet() :) ); reset_eval_cost(); map = filter_array( char, (: $1->is_scene() :) ); reset_eval_cost(); items2 = filter_array( items, (: $1->is_item() :) ); items2 = filter_array( items2, (: clonep($1) :) ); tell_user( me, sprintf("objects: %d = kind(%d) + clone(%d)", sizeof(items), sizeof(kind), sizeof(char)) ); tell_user( me, sprintf("objects: %d = user(%d) + pet(%d) + npc(%d) + Item: (%d) + map: (%d)", sizeof(char), sizeof(user), sizeof(pet), sizeof(npc), sizeof(items2), sizeof(map)) );tell_user( me, sprintf("Item: %d", sizeof(items2)) ); char2 = heart_beats(); // objects( (: get_heart_beat($1) :) ); // 注意:get_heart_beat 效率太低 kind = filter_array( char2, (: !clonep($1) :) ); char = filter_array( char2, (: clonep($1) :) ); // char2 == kind + char npc = filter_array( char, (: $1->is_npc() :) ); pet = filter_array( char, (: $1->is_pet() :) ); map = filter_array( char, (: $1->is_scene() :) ); items2 = filter_array( char2, (: $1->is_item() :) ); items2 = filter_array( items2, (: clonep($1) :) );// npc2 = filter_array( npc, (: get_heart_idle($1) :) ); user = filter_array( char, (: $1->is_user() :) ); tell_user( me, sprintf("Heart: %d = kind(%d) + clone(%d)", sizeof(char2), sizeof(kind), sizeof(char)) ); tell_user( me, sprintf("Heart: %d = user(%d) + pet(%d) + npc(%d) + map(%d) + item(%d)", sizeof(char), sizeof(user), sizeof(pet), sizeof(npc-pet), sizeof(map), sizeof(items2)) ); npc = filter_array( char, (: get_heart_beat($1) == 1 :) ); npc2 = filter_array( char, (: get_heart_beat($1) == 2 :) ); char = filter_array( char, (: get_heart_beat($1) == 10 :) ); tell_user( me, sprintf("Heart: .1(%d) .1(%d) .2(%d) 1.(%d)", sizeof(user), sizeof(npc) - sizeof(user), sizeof(npc2), sizeof(char)) );// npc = children("/inh/user/pawn");// npc2 = children("/inh/user/friend");// char = children("/inh/user/mail");//// tell_user( me, sprintf("Pawn: %d Friend: %d Mail: %d", sizeof(npc), sizeof(npc2), sizeof(char)) ); tell_user( me, sprintf("New: %d Online: %d/ %d = gm(%d) + user(%d)", ID_D->get_max_id(), SYS_USER_D->sizeof_user(), sizeof_users(), SYS_USER_D->sizeof_gm(), SYS_USER_D->sizeof_player()) );return 1;}
cmd/sys目录下文件
0 0
- 内存对象数检查
- MFC 对象诊断,检测, 内存检查
- 内存检查
- 内存泄漏检查
- 转贴:内存泄漏检查
- 如何检查内存泄露
- BoundsChecker 检查内存泄露
- VC检查内存泄露
- 内存漏洞的检查
- vc 内存泄漏检查
- 内存泄漏检查技术
- vc内存泄露检查
- 内存泄漏检查
- 检查内存泄漏 工具
- mtrace检查内存泄漏
- HookLogger检查内存泄漏
- mtrace检查内存泄漏
- VS2005内存泄露检查
- UVA - 12108 Extraordinarily Tired Students(模拟)
- Synchronized的内存可见性
- 快速系统的掌握正则表达式
- xcode git(1)配置git、github
- 网站在linux服务器上运行出现的问题(数据路10038问题,网站一些CSS样式出不来,创建目录失败等问题)
- 内存对象数检查
- php命名空间类自动加载
- Conversion of Oracle Columns into Rows
- 常用纹理和纹理压缩格式
- ext2文件系统寻址
- 机器人局部避障的动态窗口法(dynamic window approach)
- 编译hadoop
- 互联网思维:一切以用户为中心
- 二叉树的一维数组存储