内存对象数检查

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、据科学与大据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db据库(毕业设计新项目).zip
毕设新项目基于python3.7+django+sqlite开发的学生就业管理系统源码+使用说明(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、据科学与大据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 学生就业管理系统(前端) ## 项目开发环境 - IDE: vscode - node版本: v12.14.1 - npm版本: 6.13.4 - vue版本: @vue/cli 4.1.2 - 操作系统: UOS 20 ## 1.进入项目目录安装依赖 ``` npm install ``` ## 2.命令行执行进入UI界面进行项目管理 ``` vue ui ``` ## 3.编译发布包(请注意编译后存储路径) #### PS:需要将编译后的包复制到后端项目的根目录下并命名为'static' 学生就业管理系统(后端) ## 1.项目开发环境 - IDE: vscode - Django版本: 3.0.3 - Python版本: python3.7.3 - 据库 : sqlite3(测试专用) - 操作系统 : UOS 20 ## 2.csdn下载本项目并生成/安装依赖 ``` pip freeze > requirements.txt pip install -r requirements.txt ``` ## 3.项目MySQL据库链接错误 [点击查看解决方法](https://www.cnblogs.com/izbw/p/11279237.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值