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目录下文件