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

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

?? handler.c

?? MUD服務器程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  In particular, you may not remove either of *
 *  these copyright notices.                                               *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/

#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "merc.h"



AFFECT_DATA *		affect_free;



/*
 * Local functions.
 */
void	affect_modify	args( ( CHAR_DATA *ch, AFFECT_DATA *paf, bool fAdd ) );



/*
 * Retrieve a character's trusted level for permission checking.
 */
int get_trust( CHAR_DATA *ch )
{
    if ( ch->desc != NULL && ch->desc->original != NULL )
	ch = ch->desc->original;

    if ( ch->trust != 0 )
	return ch->trust;

    if ( IS_NPC(ch) && ch->level >= LEVEL_HERO )
	return LEVEL_HERO - 1;
    else
	return ch->level;
}



/*
 * Retrieve a character's age.
 */
int get_age( CHAR_DATA *ch )
{
    return 17 + ( ch->played + (int) (current_time - ch->logon) ) / 14400;

    /* 12240 assumes 30 second hours, 24 hours a day, 20 day - Kahn */
}



/*
 * Retrieve character's current strength.
 */
int get_curr_str( CHAR_DATA *ch )
{
    int max;

    if ( IS_NPC(ch) )
	return 13;

    if ( class_table[ch->class].attr_prime == APPLY_STR )
	max = 25;
    else
	max = 22;

    return URANGE( 3, ch->pcdata->perm_str + ch->pcdata->mod_str, max );
}



/*
 * Retrieve character's current intelligence.
 */
int get_curr_int( CHAR_DATA *ch )
{
    int max;

    if ( IS_NPC(ch) )
	return 13;

    if ( class_table[ch->class].attr_prime == APPLY_INT )
	max = 25;
    else
	max = 22;

    return URANGE( 3, ch->pcdata->perm_int + ch->pcdata->mod_int, max );
}



/*
 * Retrieve character's current wisdom.
 */
int get_curr_wis( CHAR_DATA *ch )
{
    int max;

    if ( IS_NPC(ch) )
	return 13;

    if ( class_table[ch->class].attr_prime == APPLY_WIS )
	max = 25;
    else
	max = 22;

    return URANGE( 3, ch->pcdata->perm_wis + ch->pcdata->mod_wis, max );
}



/*
 * Retrieve character's current dexterity.
 */
int get_curr_dex( CHAR_DATA *ch )
{
    int max;

    if ( IS_NPC(ch) )
	return 13;

    if ( class_table[ch->class].attr_prime == APPLY_DEX )
	max = 25;
    else
	max = 22;

    return URANGE( 3, ch->pcdata->perm_dex + ch->pcdata->mod_dex, max );
}



/*
 * Retrieve character's current constitution.
 */
int get_curr_con( CHAR_DATA *ch )
{
    int max;

    if ( IS_NPC(ch) )
	return 13;

    if ( class_table[ch->class].attr_prime == APPLY_CON )
	max = 25;
    else
	max = 22;

    return URANGE( 3, ch->pcdata->perm_con + ch->pcdata->mod_con, max );
}



/*
 * Retrieve a character's carry capacity.
 */
int can_carry_n( CHAR_DATA *ch )
{
    if ( !IS_NPC(ch) && ch->level >= LEVEL_IMMORTAL )
	return 1000;

    if ( IS_NPC(ch) && IS_SET(ch->act, ACT_PET) )
	return 0;

    return MAX_WEAR + 2 * get_curr_dex( ch ) / 2;
}



/*
 * Retrieve a character's carry capacity.
 */
int can_carry_w( CHAR_DATA *ch )
{
    if ( !IS_NPC(ch) && ch->level >= LEVEL_IMMORTAL )
	return 1000000;

    if ( IS_NPC(ch) && IS_SET(ch->act, ACT_PET) )
	return 0;

    return str_app[get_curr_str(ch)].carry;
}



/*
 * See if a string is one of the names of an object.
 */
/*
 * New is_name sent in by Alander.
 */

bool is_name( const char *str, char *namelist )
{
    char name[MAX_INPUT_LENGTH];

    for ( ; ; )
    {
	namelist = one_argument( namelist, name );
	if ( name[0] == '\0' )
	    return FALSE;
	if ( !str_cmp( str, name ) )
	    return TRUE;
    }
}


/*
 * Apply or remove an affect to a character.
 */
void affect_modify( CHAR_DATA *ch, AFFECT_DATA *paf, bool fAdd )
{
    OBJ_DATA *wield;
    int mod;

    mod = paf->modifier;

    if ( fAdd )
    {
	SET_BIT( ch->affected_by, paf->bitvector );
    }
    else
    {
	REMOVE_BIT( ch->affected_by, paf->bitvector );
	mod = 0 - mod;
    }

    if ( IS_NPC(ch) )
	return;

    switch ( paf->location )
    {
    default:
	bug( "Affect_modify: unknown location %d.", paf->location );
	return;

    case APPLY_NONE:						break;
    case APPLY_STR:           ch->pcdata->mod_str	+= mod;	break;
    case APPLY_DEX:           ch->pcdata->mod_dex	+= mod;	break;
    case APPLY_INT:           ch->pcdata->mod_int	+= mod;	break;
    case APPLY_WIS:           ch->pcdata->mod_wis	+= mod;	break;
    case APPLY_CON:           ch->pcdata->mod_con	+= mod;	break;
    case APPLY_SEX:           ch->sex			+= mod;
       // @@@ This next bit is from the net...
       if ( ch->sex < 0 || ch->sex > 2 )
          ch->sex = 0;
       break;
    case APPLY_CLASS:						break;
    case APPLY_LEVEL:						break;
    case APPLY_AGE:						break;
    case APPLY_HEIGHT:						break;
    case APPLY_WEIGHT:						break;
    case APPLY_MANA:          ch->max_mana		+= mod;	break;
    case APPLY_HIT:           ch->max_hit		+= mod;	break;
    case APPLY_MOVE:          ch->max_move		+= mod;	break;
    case APPLY_GOLD:						break;
    case APPLY_EXP:						break;
    case APPLY_AC:            ch->armor			+= mod;	break;
    case APPLY_HITROLL:       ch->hitroll		+= mod;	break;
    case APPLY_DAMROLL:       ch->damroll		+= mod;	break;
    case APPLY_SAVING_PARA:   ch->saving_throw		+= mod;	break;
    case APPLY_SAVING_ROD:    ch->saving_throw		+= mod;	break;
    case APPLY_SAVING_PETRI:  ch->saving_throw		+= mod;	break;
    case APPLY_SAVING_BREATH: ch->saving_throw		+= mod;	break;
    case APPLY_SAVING_SPELL:  ch->saving_throw		+= mod;	break;

    // Don't fault on TFC zones
    case APPLY_CHARISMA:     break;
    case APPLY_LUC:          break;    case APPLY_NOSTEAL:      break;
    case APPLY_NOSLEEP:      break;
    case APPLY_NOSUMMON:     break;
    case APPLY_NOCHARM:      break;
    case APPLY_NOSEXCHANGE:  break;
    case APPLY_TRUESEE:      break;
    case APPLY_NOINFO:       break;
    }

    /*
     * Check for weapon wielding.
     * Guard against recursion (for weapons with affects).
     */
    if ( ( wield = get_eq_char( ch, WEAR_WIELD ) ) != NULL
    &&   get_obj_weight(wield) > str_app[get_curr_str(ch)].wield )
    {
	static int depth;

	if ( depth == 0 )
	{
	    depth++;
	    act( "You drop $p.", ch, wield, NULL, TO_CHAR );
	    act( "$n drops $p.", ch, wield, NULL, TO_ROOM );
	    obj_from_char( wield );
	    obj_to_room( wield, ch->in_room );
	    depth--;
	}
    }

    return;
}



/*
 * Give an affect to a char.
 */
void affect_to_char( CHAR_DATA *ch, AFFECT_DATA *paf )
{
    AFFECT_DATA *paf_new;

    if ( affect_free == NULL )
    {
	paf_new		= alloc_perm( sizeof(*paf_new) );
    }
    else
    {
	paf_new		= affect_free;
	affect_free	= affect_free->next;
    }

    *paf_new		= *paf;
    paf_new->next	= ch->affected;
    ch->affected	= paf_new;

    affect_modify( ch, paf_new, TRUE );
    return;
}



/*
 * Remove an affect from a char.
 */
void affect_remove( CHAR_DATA *ch, AFFECT_DATA *paf )
{
    if ( ch->affected == NULL )
    {
	bug( "Affect_remove: no affect.", 0 );
	return;
    }

    affect_modify( ch, paf, FALSE );

    if ( paf == ch->affected )
    {
	ch->affected	= paf->next;
    }
    else
    {
	AFFECT_DATA *prev;

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

	if ( prev == NULL )
	{
	    bug( "Affect_remove: cannot find paf.", 0 );
	    return;
	}
    }

    paf->next	= affect_free;
    affect_free	= paf->next;
    return;
}



/*
 * Strip all affects of a given sn.
 */
void affect_strip( CHAR_DATA *ch, int sn )
{
    AFFECT_DATA *paf;
    AFFECT_DATA *paf_next;

    for ( paf = ch->affected; paf != NULL; paf = paf_next )
    {
	paf_next = paf->next;
	if ( paf->type == sn )
	    affect_remove( ch, paf );
    }

    return;
}



/*
 * Return true if a char is affected by a spell.
 */
bool is_affected( CHAR_DATA *ch, int sn )
{
    AFFECT_DATA *paf;

    for ( paf = ch->affected; paf != NULL; paf = paf->next )
    {
	if ( paf->type == sn )
	    return TRUE;
    }

    return FALSE;
}



/*
 * Add or enhance an affect.
 */
void affect_join( CHAR_DATA *ch, AFFECT_DATA *paf )
{
    AFFECT_DATA *paf_old;
    bool found;

    found = FALSE;
    for ( paf_old = ch->affected; paf_old != NULL; paf_old = paf_old->next )
    {
	if ( paf_old->type == paf->type )
	{
	    paf->duration += paf_old->duration;
	    paf->modifier += paf_old->modifier;
	    affect_remove( ch, paf_old );
	    break;
	}
    }

    affect_to_char( ch, paf );
    return;
}



/*
 * Move a char out of a room.
 */
void char_from_room( CHAR_DATA *ch )
{
    OBJ_DATA *obj;

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

    if ( !IS_NPC(ch) )
	--ch->in_room->area->nplayer;

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

    if ( ch == ch->in_room->people )
    {
	ch->in_room->people = ch->next_in_room;
    }
    else
    {
	CHAR_DATA *prev;

	for ( prev = ch->in_room->people; prev; prev = prev->next_in_room )
	{
	    if ( prev->next_in_room == ch )
	    {
		prev->next_in_room = ch->next_in_room;
		break;
	    }
	}

	if ( prev == NULL )
	    bug( "Char_from_room: ch not found.", 0 );
    }

    ch->in_room      = NULL;
    ch->next_in_room = NULL;
    return;
}



/*
 * Move a char into a room.
 */
void char_to_room( CHAR_DATA *ch, ROOM_INDEX_DATA *pRoomIndex )
{
    OBJ_DATA *obj;

    if ( pRoomIndex == NULL )
    {
	bug( "Char_to_room: NULL.", 0 );
	return;
    }

    ch->in_room		= pRoomIndex;
    ch->next_in_room	= pRoomIndex->people;
    pRoomIndex->people	= ch;

    if ( !IS_NPC(ch) )
	++ch->in_room->area->nplayer;

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

    return;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美日韩一区二区| 7777精品伊人久久久大香线蕉完整版| 99re热视频这里只精品 | 亚洲精品欧美在线| 精品亚洲成a人| 欧洲日韩一区二区三区| 日本一区免费视频| 男男视频亚洲欧美| 欧亚洲嫩模精品一区三区| 久久九九国产精品| 麻豆精品在线播放| 欧美日韩亚洲国产综合| 成人免费在线播放视频| 国产福利一区二区三区视频在线| 欧美精品第1页| 亚洲图片欧美一区| 91久久免费观看| 国产精品成人在线观看| 国产精品888| 精品裸体舞一区二区三区| 婷婷综合五月天| 欧美日韩精品免费观看视频| 亚洲乱码一区二区三区在线观看| 国产美女在线观看一区| 日韩免费高清电影| 日本视频一区二区| 这里只有精品视频在线观看| 亚洲成年人网站在线观看| 色呦呦日韩精品| 亚洲女子a中天字幕| 色综合色狠狠综合色| 亚洲天堂精品在线观看| 91年精品国产| 一区二区不卡在线播放| 欧美伊人久久大香线蕉综合69| 亚洲视频每日更新| 91浏览器入口在线观看| 伊人开心综合网| 欧美日韩综合不卡| 亚洲第一主播视频| 欧美日韩成人综合天天影院| 五月天丁香久久| 欧美一二三在线| 精品在线一区二区| 国产欧美一区二区在线| 丁香五精品蜜臀久久久久99网站| 国产欧美精品一区二区三区四区| 成人黄色免费短视频| 亚洲品质自拍视频网站| 欧美在线小视频| 免费人成黄页网站在线一区二区| 欧美变态tickle挠乳网站| 九九视频精品免费| 中文字幕免费一区| 欧美无人高清视频在线观看| 日本亚洲电影天堂| 国产午夜精品久久| 欧美亚洲免费在线一区| 日韩不卡免费视频| 国产欧美日韩三区| 在线精品视频小说1| 日本成人在线视频网站| 国产精品亲子伦对白| 在线观看成人小视频| 国产原创一区二区| 中文字幕一区二区三区在线观看| 欧美视频一区二区三区在线观看| 美女视频网站久久| 国产精品的网站| 欧美另类久久久品| 成人午夜免费av| 日韩不卡一区二区| 中文字幕一区二区在线播放| 日韩一区二区在线观看视频| 97超碰欧美中文字幕| 欧美aa在线视频| 亚洲视频 欧洲视频| 日韩欧美不卡一区| 欧美亚洲国产一卡| 成人听书哪个软件好| 五月综合激情网| 国产精品久久久久一区二区三区共| 欧美综合亚洲图片综合区| 国产精品亚洲第一区在线暖暖韩国| 亚洲精品乱码久久久久久| 久久色在线观看| 欧美精品成人一区二区三区四区| 成人国产亚洲欧美成人综合网| 日韩制服丝袜先锋影音| 亚洲乱码国产乱码精品精可以看 | 2020日本不卡一区二区视频| 色综合久久99| 成人免费视频caoporn| 看片网站欧美日韩| 无码av免费一区二区三区试看| 国产精品你懂的| 欧美精品一区二区三区久久久 | 亚洲国产综合人成综合网站| 中国色在线观看另类| 日韩一二三四区| 欧美理论片在线| 欧美日韩国产一区| 色婷婷久久一区二区三区麻豆| 国产精品一区免费视频| 另类专区欧美蜜桃臀第一页| 亚洲18色成人| 午夜久久福利影院| 亚洲第一会所有码转帖| 夜夜嗨av一区二区三区| 亚洲人一二三区| 亚洲欧美激情一区二区| 中文无字幕一区二区三区| 久久久久久影视| 国产人伦精品一区二区| 国产人成亚洲第一网站在线播放 | 91精品国产手机| 91精品国产入口| 日韩欧美色综合| 精品国产凹凸成av人导航| 精品久久久久久亚洲综合网| 欧美大白屁股肥臀xxxxxx| 日韩美女主播在线视频一区二区三区| 91精品国产色综合久久不卡电影| 欧美一区二区三区四区在线观看 | 欧美伊人久久大香线蕉综合69| 在线日韩av片| 这里只有精品99re| 久久综合九色综合97_久久久| 精品国产免费视频| 久久精品视频一区二区三区| 中文字幕巨乱亚洲| 一区二区三区资源| 亚洲国产精品欧美一二99| 日产国产高清一区二区三区| 麻豆高清免费国产一区| 精品一区二区三区在线观看| 国产a视频精品免费观看| 99久久精品免费看| 欧美日韩一区二区三区四区| 日韩一区二区三| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲色图制服丝袜| 日韩精品一二三区| 国产毛片精品一区| 欧美在线一二三四区| 精品三级av在线| **欧美大码日韩| 午夜欧美一区二区三区在线播放| 奇米精品一区二区三区在线观看| 高清在线观看日韩| 欧美日韩亚洲综合| 国产欧美日韩中文久久| 一区二区三区**美女毛片| 久久国产生活片100| 99久久免费国产| 欧美一区二区三区视频免费| 国产精品久久久久一区二区三区共| 亚洲国产一区二区三区| 国产精品123| 69堂亚洲精品首页| 中文字幕精品在线不卡| 日韩一区精品字幕| 色综合久久久久久久久久久| 久久综合中文字幕| 亚洲福利视频三区| 懂色中文一区二区在线播放| 91精品中文字幕一区二区三区| 日本一区二区三区dvd视频在线| 亚洲1区2区3区视频| 91在线免费看| 国产色产综合色产在线视频| 日本sm残虐另类| 91福利视频在线| 国产精品久久久久久久岛一牛影视 | bt欧美亚洲午夜电影天堂| 欧美日韩国产精选| 亚洲欧美一区二区三区国产精品 | 一本久久a久久精品亚洲| 精品久久久久av影院| 午夜电影网亚洲视频| 在线视频欧美区| 亚洲欧美乱综合| 成人99免费视频| 中文字幕免费不卡| 国产毛片精品国产一区二区三区| 欧美一区二区三区日韩| 午夜精品视频一区| 欧美曰成人黄网| 亚洲品质自拍视频网站| av亚洲产国偷v产偷v自拍| 国产三级精品视频| 国内精品免费在线观看| 久久综合久久综合久久综合| 六月丁香综合在线视频| 日韩女优av电影| 激情久久久久久久久久久久久久久久| 91精品国产色综合久久ai换脸| 亚洲国产精品久久久男人的天堂| 日本高清成人免费播放| 亚洲精品视频在线看|