内存对象数检查

来源:互联网 发布: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