亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? handler.c

?? MUD服務器程序
?? C
?? 第 1 頁 / 共 3 頁
字號:

/*
 * Give an obj to a char.
 */
void obj_to_char( OBJ_DATA *obj, CHAR_DATA *ch )
{
    obj->next_content	 = ch->carrying;
    ch->carrying	 = obj;
    obj->carried_by	 = ch;
    obj->in_room	 = NULL;
    obj->in_obj		 = NULL;
    ch->carry_number	+= get_obj_number( obj );
    ch->carry_weight	+= get_obj_weight( obj );
}



/*
 * Take an obj from its character.
 */
void obj_from_char( OBJ_DATA *obj )
{
    CHAR_DATA *ch;

    if ( ( ch = obj->carried_by ) == NULL )
    {
	bug( "Obj_from_char: null ch.", 0 );
	return;
    }

    if ( obj->wear_loc != WEAR_NONE )
	unequip_char( ch, obj );

    if ( ch->carrying == obj )
    {
	ch->carrying = obj->next_content;
    }
    else
    {
	OBJ_DATA *prev;

	for ( prev = ch->carrying; prev != NULL; prev = prev->next_content )
	{
	    if ( prev->next_content == obj )
	    {
		prev->next_content = obj->next_content;
		break;
	    }
	}

	if ( prev == NULL )
	    bug( "Obj_from_char: obj not in list.", 0 );
    }

    obj->carried_by	 = NULL;
    obj->next_content	 = NULL;
    ch->carry_number	-= get_obj_number( obj );
    ch->carry_weight	-= get_obj_weight( obj );
    return;
}



/*
 * Find the ac value of an obj, including position effect.
 */
int apply_ac( OBJ_DATA *obj, int iWear )
{
    if ( obj->item_type != ITEM_ARMOR )
	return 0;

    switch ( iWear )
    {
    case WEAR_BODY:	return 3 * obj->value[0];
    case WEAR_HEAD:	return 2 * obj->value[0];
    case WEAR_LEGS:	return 2 * obj->value[0];
    case WEAR_FEET:	return     obj->value[0];
    case WEAR_HANDS:	return     obj->value[0];
    case WEAR_ARMS:	return     obj->value[0];
    case WEAR_SHIELD:	return     obj->value[0];
    case WEAR_FINGER_L:	return     obj->value[0];
    case WEAR_FINGER_R: return     obj->value[0];
    case WEAR_NECK_1:	return     obj->value[0];
    case WEAR_NECK_2:	return     obj->value[0];
    case WEAR_ABOUT:	return 2 * obj->value[0];
    case WEAR_WAIST:	return     obj->value[0];
    case WEAR_WRIST_L:	return     obj->value[0];
    case WEAR_WRIST_R:	return     obj->value[0];
    case WEAR_HOLD:	return     obj->value[0];
    }

    return 0;
}



/*
 * Find a piece of eq on a character.
 */
OBJ_DATA *get_eq_char( CHAR_DATA *ch, int iWear )
{
    OBJ_DATA *obj;

    for ( obj = ch->carrying; obj != NULL; obj = obj->next_content )
    {
	if ( obj->wear_loc == iWear )
	    return obj;
    }

    return NULL;
}



/*
 * Equip a char with an obj.
 */
void equip_char( CHAR_DATA *ch, OBJ_DATA *obj, int iWear )
{
    AFFECT_DATA *paf;

    if ( get_eq_char( ch, iWear ) != NULL )
    {
	bug( "Equip_char: already equipped (%d).", iWear );
	return;
    }

    if ( ( IS_OBJ_STAT(obj, ITEM_ANTI_EVIL)    && IS_EVIL(ch)    )
    ||   ( IS_OBJ_STAT(obj, ITEM_ANTI_GOOD)    && IS_GOOD(ch)    )
    ||   ( IS_OBJ_STAT(obj, ITEM_ANTI_NEUTRAL) && IS_NEUTRAL(ch) ) )
    {
	/*
	 * Thanks to Morgenes for the bug fix here!
	 */
	act( "You are zapped by $p and drop it.", ch, obj, NULL, TO_CHAR );
	act( "$n is zapped by $p and drops it.",  ch, obj, NULL, TO_ROOM );
	obj_from_char( obj );
	obj_to_room( obj, ch->in_room );
	return;
    }

    ch->armor      	-= apply_ac( obj, iWear );
    obj->wear_loc	 = iWear;

    for ( paf = obj->pIndexData->affected; paf != NULL; paf = paf->next )
	affect_modify( ch, paf, TRUE );
    for ( paf = obj->affected; paf != NULL; paf = paf->next )
	affect_modify( ch, paf, TRUE );

    if ( obj->item_type == ITEM_LIGHT
    &&   obj->value[2] != 0
    &&   ch->in_room != NULL )
	++ch->in_room->light;

    return;
}



/*
 * Unequip a char with an obj.
 */
void unequip_char( CHAR_DATA *ch, OBJ_DATA *obj )
{
    AFFECT_DATA *paf;

    if ( obj->wear_loc == WEAR_NONE )
    {
	bug( "Unequip_char: already unequipped.", 0 );
	return;
    }

    ch->armor		+= apply_ac( obj, obj->wear_loc );
    obj->wear_loc	 = -1;

    for ( paf = obj->pIndexData->affected; paf != NULL; paf = paf->next )
	affect_modify( ch, paf, FALSE );
    for ( paf = obj->affected; paf != NULL; paf = paf->next )
	affect_modify( ch, paf, FALSE );

    if ( obj->item_type == ITEM_LIGHT
    &&   obj->value[2] != 0
    &&   ch->in_room != NULL
    &&   ch->in_room->light > 0 )
	--ch->in_room->light;

    return;
}



/*
 * Count occurrences of an obj in a list.
 */
int count_obj_list( OBJ_INDEX_DATA *pObjIndex, OBJ_DATA *list )
{
    OBJ_DATA *obj;
    int nMatch;

    nMatch = 0;
    for ( obj = list; obj != NULL; obj = obj->next_content )
    {
	if ( obj->pIndexData == pObjIndex )
	    nMatch++;
    }

    return nMatch;
}



/*
 * Move an obj out of a room.
 */
void obj_from_room( OBJ_DATA *obj )
{
    ROOM_INDEX_DATA *in_room;

    if ( ( in_room = obj->in_room ) == NULL )
    {
	bug( "obj_from_room: NULL.", 0 );
	return;
    }

    if ( obj == in_room->contents )
    {
	in_room->contents = obj->next_content;
    }
    else
    {
	OBJ_DATA *prev;

	for ( prev = in_room->contents; prev; prev = prev->next_content )
	{
	    if ( prev->next_content == obj )
	    {
		prev->next_content = obj->next_content;
		break;
	    }
	}

	if ( prev == NULL )
	{
	    bug( "Obj_from_room: obj not found.", 0 );
	    return;
	}
    }

    obj->in_room      = NULL;
    obj->next_content = NULL;
    return;
}



/*
 * Move an obj into a room.
 */
void obj_to_room( OBJ_DATA *obj, ROOM_INDEX_DATA *pRoomIndex )
{
    obj->next_content		= pRoomIndex->contents;
    pRoomIndex->contents	= obj;
    obj->in_room		= pRoomIndex;
    obj->carried_by		= NULL;
    obj->in_obj			= NULL;
    return;
}



/*
 * Move an object into an object.
 */
void obj_to_obj( OBJ_DATA *obj, OBJ_DATA *obj_to )
{
    obj->next_content		= obj_to->contains;
    obj_to->contains		= obj;
    obj->in_obj			= obj_to;
    obj->in_room		= NULL;
    obj->carried_by		= NULL;

    for ( ; obj_to != NULL; obj_to = obj_to->in_obj )
    {
	if ( obj_to->carried_by != NULL )
	{
//	    obj_to->carried_by->carry_number += get_obj_number( obj );
	    obj_to->carried_by->carry_weight += get_obj_weight( obj );
	}
    }

    return;
}



/*
 * Move an object out of an object.
 */
void obj_from_obj( OBJ_DATA *obj )
{
    OBJ_DATA *obj_from;

    if ( ( obj_from = obj->in_obj ) == NULL )
    {
	bug( "Obj_from_obj: null obj_from.", 0 );
	return;
    }

    if ( obj == obj_from->contains )
    {
	obj_from->contains = obj->next_content;
    }
    else
    {
	OBJ_DATA *prev;

	for ( prev = obj_from->contains; prev; prev = prev->next_content )
	{
	    if ( prev->next_content == obj )
	    {
		prev->next_content = obj->next_content;
		break;
	    }
	}

	if ( prev == NULL )
	{
	    bug( "Obj_from_obj: obj not found.", 0 );
	    return;
	}
    }

    obj->next_content = NULL;
    obj->in_obj       = NULL;

    for ( ; obj_from != NULL; obj_from = obj_from->in_obj )
    {
	if ( obj_from->carried_by != NULL )
	{
//	    obj_from->carried_by->carry_number -= get_obj_number( obj );
	    obj_from->carried_by->carry_weight -= get_obj_weight( obj );
	}
    }

    return;
}



/*
 * Extract an obj from the world.
 */
void extract_obj( OBJ_DATA *obj )
{
    OBJ_DATA *obj_content;
    OBJ_DATA *obj_next;

    if ( obj->in_room != NULL )
	obj_from_room( obj );
    else if ( obj->carried_by != NULL )
	obj_from_char( obj );
    else if ( obj->in_obj != NULL )
	obj_from_obj( obj );

    for ( obj_content = obj->contains; obj_content; obj_content = obj_next )
    {
	obj_next = obj_content->next_content;
	extract_obj( obj->contains );
    }

    if ( object_list == obj )
    {
	object_list = obj->next;
    }
    else
    {
	OBJ_DATA *prev;

	for ( prev = object_list; prev != NULL; prev = prev->next )
	{
	    if ( prev->next == obj )
	    {
		prev->next = obj->next;
		break;
	    }
	}

	if ( prev == NULL )
	{
	    bug( "Extract_obj: obj %d not found.", obj->pIndexData->vnum );
	    return;
	}
    }

    {
	AFFECT_DATA *paf;
	AFFECT_DATA *paf_next;

	for ( paf = obj->affected; paf != NULL; paf = paf_next )
	{
	    paf_next    = paf->next;
	    paf->next   = affect_free;
	    affect_free = paf;
	}
    }

    {
	EXTRA_DESCR_DATA *ed;
	EXTRA_DESCR_DATA *ed_next;

	for ( ed = obj->extra_descr; ed != NULL; ed = ed_next )
	{
	    ed_next		= ed->next;
	    free_string( ed->description );
	    free_string( ed->keyword     );
	    extra_descr_free	= ed;
	}
    }

    free_string( obj->name        );
    free_string( obj->description );
    free_string( obj->short_descr );
    --obj->pIndexData->count;
    obj->next	= obj_free;
    obj_free	= obj;
    return;
}



/*
 * Extract a char from the world.
 */
void extract_char( CHAR_DATA *ch, bool fPull )
{
    CHAR_DATA *wch;
    OBJ_DATA *obj;
    OBJ_DATA *obj_next;

    if ( ch->in_room == NULL )
    {
	bug( "Extract_char: NULL.", 0 );
	return;
    }

    if ( fPull )
	die_follower( ch );

    stop_fighting( ch, TRUE );

    for ( obj = ch->carrying; obj != NULL; obj = obj_next )
    {
	obj_next = obj->next_content;
	extract_obj( obj );
    }
    
    char_from_room( ch );

    if ( !fPull )
    {
/*	char_to_room( ch, get_room_index( ROOM_VNUM_ALTAR ) );*/
	char_to_room( ch, get_room_index( race_table[ch->race].city_temple ) );
	return;
    }

    if ( IS_NPC(ch) )
	--ch->pIndexData->count;

    if ( ch->desc != NULL && ch->desc->original != NULL )
	do_return( ch, "" );

    for ( wch = char_list; wch != NULL; wch = wch->next )
    {
	if ( wch->reply == ch )
	    wch->reply = NULL;
    }

    if ( ch == char_list )
    {
       char_list = ch->next;
    }
    else
    {
	CHAR_DATA *prev;

	for ( prev = char_list; prev != NULL; prev = prev->next )
	{
	    if ( prev->next == ch )
	    {
		prev->next = ch->next;
		break;
	    }
	}

	if ( prev == NULL )
	{
	    bug( "Extract_char: char not found.", 0 );
	    return;
	}
    }

    if ( ch->desc )
	ch->desc->character = NULL;
    free_char( ch );
    return;
}



/*
 * Find a char in the room.
 */
CHAR_DATA *get_char_room( CHAR_DATA *ch, char *argument )
{
    char arg[MAX_INPUT_LENGTH];
    CHAR_DATA *rch;
    int number;
    int count;

    number = number_argument( argument, arg );
    count  = 0;
    if ( !str_cmp( arg, "self" ) )
	return ch;
    for ( rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room )
    {
	if ( !can_see( ch, rch ) || !is_name( arg, rch->name ) )
	    continue;
	if ( ++count == number )
	    return rch;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道a无线码一区v| 日韩美女视频一区二区| 久久久国产精华| 亚洲精品欧美激情| 久久精品国产网站| 色先锋资源久久综合| 精品国产一区二区国模嫣然| 专区另类欧美日韩| 久久成人免费网站| 欧美网站一区二区| 中文字幕欧美国产| 久久精品国产精品青草| 欧美综合色免费| 国产精品无圣光一区二区| 日日夜夜免费精品| 日本道色综合久久| 中文字幕在线不卡视频| 另类小说图片综合网| 欧美日韩午夜精品| 亚洲男女一区二区三区| 国产成人午夜精品影院观看视频| 这里只有精品电影| 一区二区三区资源| 99精品国产91久久久久久| 久久女同精品一区二区| 美女视频网站久久| 91 com成人网| 偷拍一区二区三区四区| 精品视频在线视频| 亚洲一区视频在线| 欧美怡红院视频| 亚洲国产综合91精品麻豆| 一本色道久久综合亚洲91 | 日本aⅴ免费视频一区二区三区| 91女人视频在线观看| 欧美国产日本韩| 成人毛片老司机大片| 欧美国产日韩一二三区| 成人免费的视频| 亚洲欧洲另类国产综合| 成人av一区二区三区| 综合欧美一区二区三区| 色婷婷精品大在线视频| 亚洲乱码国产乱码精品精98午夜 | 中文字幕第一区综合| 丁香激情综合国产| 亚洲人成7777| 欧美日韩一区视频| 日韩 欧美一区二区三区| 欧美一级黄色录像| 国模大尺度一区二区三区| 久久色成人在线| 成人免费看片app下载| 亚洲精品视频观看| 欧美一区二区在线观看| 麻豆91在线播放| 欧美国产亚洲另类动漫| 91美女在线观看| 石原莉奈一区二区三区在线观看| 91精品国产综合久久久久久漫画| 经典一区二区三区| 欧美激情一区二区三区在线| 日本久久一区二区三区| 日本欧美一区二区在线观看| 久久蜜桃av一区二区天堂| 99久久精品99国产精品| 亚洲动漫第一页| 久久免费看少妇高潮| 91亚洲男人天堂| 日本欧美大码aⅴ在线播放| 久久久久九九视频| 欧美在线三级电影| 激情成人综合网| 一区二区在线观看视频在线观看| 欧美一级黄色录像| jizzjizzjizz欧美| 热久久一区二区| 自拍偷拍欧美精品| 久久伊人蜜桃av一区二区| 91在线视频播放地址| 老司机精品视频一区二区三区| 国产精品久久久久影院老司| 欧美一区三区四区| 成人97人人超碰人人99| 久久成人羞羞网站| 亚洲福利电影网| 日韩美女精品在线| 国产亚洲一区二区在线观看| 欧美日韩高清一区二区不卡| 成人网页在线观看| 午夜不卡av免费| 亚洲欧美日韩在线不卡| 久久综合久久鬼色中文字| 欧美无砖专区一中文字| 成人午夜激情片| 国内久久婷婷综合| 爽好久久久欧美精品| 亚洲精品免费播放| 国产精品家庭影院| 精品国产乱码久久久久久浪潮| 欧美亚洲另类激情小说| 99久久伊人精品| 国产麻豆成人传媒免费观看| 美女诱惑一区二区| 丝袜美腿亚洲一区| 性欧美大战久久久久久久久| 日韩一区中文字幕| 国产精品日日摸夜夜摸av| 久久在线观看免费| 2024国产精品| 久久久久久毛片| 久久嫩草精品久久久精品| 日韩一区二区电影在线| 56国语精品自产拍在线观看| 欧美唯美清纯偷拍| 精品视频一区二区三区免费| 91浏览器打开| 精品污污网站免费看| 欧美亚洲综合久久| 欧美日韩国产中文| 91精品国产综合久久久蜜臀图片 | 久久久久久久综合| 精品美女一区二区| 久久精品人人爽人人爽| 国产欧美视频一区二区| 中文字幕巨乱亚洲| 亚洲欧洲无码一区二区三区| 日韩一区日韩二区| 一区二区欧美精品| 天堂蜜桃一区二区三区| 蜜桃久久久久久| 韩国精品免费视频| 成人性视频免费网站| 色婷婷综合中文久久一本| 色狠狠色狠狠综合| 欧美另类z0zxhd电影| 日韩欧美一二三四区| 久久精品欧美日韩| 亚洲美女偷拍久久| 视频一区在线播放| 国产一区二区三区免费看| aaa欧美日韩| 欧美三级日本三级少妇99| 欧美一区二区三区在线观看| 欧美大胆人体bbbb| 国产精品视频线看| 亚洲成人自拍偷拍| 韩国v欧美v日本v亚洲v| 99国内精品久久| 日韩欧美一区电影| 日韩毛片一二三区| 日本大胆欧美人术艺术动态| 国产91精品在线观看| 欧美色网一区二区| 国产视频在线观看一区二区三区| 一区二区三区美女视频| 丝袜美腿亚洲一区二区图片| 国产乱子轮精品视频| 色天使久久综合网天天| 欧美一区二区视频在线观看2020 | 欧美一区在线视频| 欧美国产日韩精品免费观看| 午夜精品福利在线| 国产精品66部| 在线播放一区二区三区| 亚洲国产精品成人综合| 日韩中文字幕一区二区三区| 成人av免费在线播放| 欧美电影免费观看高清完整版 | 久久久青草青青国产亚洲免观| 亚洲黄色片在线观看| 国产一区激情在线| 精品视频在线免费观看| 午夜国产精品一区| 丁香婷婷深情五月亚洲| 欧美一区二区三区男人的天堂| 亚洲欧美日韩精品久久久久| 国产精品一区三区| 欧美一区二区三区电影| 亚洲影视在线播放| 99国产一区二区三精品乱码| 欧美精品一区二区三区久久久| 舔着乳尖日韩一区| 色婷婷av一区| 日韩毛片高清在线播放| 国产福利91精品一区二区三区| 欧美一区二区三区视频在线观看 | 日本欧美大码aⅴ在线播放| 日本道色综合久久| 国产精品欧美一区喷水| 国产在线精品不卡| 日韩欧美国产系列| 日韩av在线免费观看不卡| 在线观看日韩电影| 亚洲四区在线观看| 成人av综合在线| 亚洲国产精品ⅴa在线观看| 久久国产精品99久久人人澡| 日韩一区二区三区四区 | 在线不卡a资源高清|