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

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

?? magic.c

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



/*
 * NPC spells.
 */
void spell_acid_breath( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    OBJ_DATA *obj_lose;
    OBJ_DATA *obj_next;
    int dam;
    int hpch;

    if ( number_percent( ) < 2 * level && !saves_spell( level, victim ) )
    {
	for ( obj_lose = ch->carrying; obj_lose != NULL; obj_lose = obj_next )
	{
	    int iWear;

	    obj_next = obj_lose->next_content;

	    if ( number_bits( 2 ) != 0 )
		continue;

	    switch ( obj_lose->item_type )
	    {
	    case ITEM_ARMOR:
		if ( obj_lose->value[0] > 0 )
		{
		    act( "$p is pitted and etched!",
			victim, obj_lose, NULL, TO_CHAR );
		    if ( ( iWear = obj_lose->wear_loc ) != WEAR_NONE )
			victim->armor -= apply_ac( obj_lose, iWear );
		    obj_lose->value[0] -= 1;
		    obj_lose->cost      = 0;
		    if ( iWear != WEAR_NONE )
			victim->armor += apply_ac( obj_lose, iWear );
		}
		break;

	    case ITEM_CONTAINER:
		act( "$p fumes and dissolves!",
		    victim, obj_lose, NULL, TO_CHAR );
		extract_obj( obj_lose );
		break;
	    }
	}
    }

    hpch = UMAX( 10, ch->hit );
    dam  = number_range( hpch/16+1, hpch/8 );
    if ( saves_spell( level, victim ) )
	dam /= 2;
    damage( ch, victim, dam, sn );
    return;
}



void spell_fire_breath( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    OBJ_DATA *obj_lose;
    OBJ_DATA *obj_next;
    int dam;
    int hpch;

    if ( number_percent( ) < 2 * level && !saves_spell( level, victim ) )
    {
	for ( obj_lose = victim->carrying; obj_lose != NULL;
	obj_lose = obj_next )
	{
	    char *msg;

	    obj_next = obj_lose->next_content;
	    if ( number_bits( 2 ) != 0 )
		continue;

	    switch ( obj_lose->item_type )
	    {
	    default:             continue;
	    case ITEM_CONTAINER: msg = "$p ignites and burns!";   break;
	    case ITEM_POTION:    msg = "$p bubbles and boils!";   break;
	    case ITEM_SCROLL:    msg = "$p crackles and burns!";  break;
	    case ITEM_STAFF:     msg = "$p smokes and chars!";    break;
	    case ITEM_WAND:      msg = "$p sparks and sputters!"; break;
	    case ITEM_FOOD:      msg = "$p blackens and crisps!"; break;
	    case ITEM_PILL:      msg = "$p melts and drips!";     break;
	    }

	    act( msg, victim, obj_lose, NULL, TO_CHAR );
	    extract_obj( obj_lose );
	}
    }

    hpch = UMAX( 10, ch->hit );
    dam  = number_range( hpch/16+1, hpch/8 );
    if ( saves_spell( level, victim ) )
	dam /= 2;
    damage( ch, victim, dam, sn );
    return;
}



void spell_frost_breath( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    OBJ_DATA *obj_lose;
    OBJ_DATA *obj_next;
    int dam;
    int hpch;

    if ( number_percent( ) < 2 * level && !saves_spell( level, victim ) )
    {
	for ( obj_lose = victim->carrying; obj_lose != NULL;
	obj_lose = obj_next )
	{
	    char *msg;

	    obj_next = obj_lose->next_content;
	    if ( number_bits( 2 ) != 0 )
		continue;

	    switch ( obj_lose->item_type )
	    {
	    default:            continue;
	    case ITEM_CONTAINER:
	    case ITEM_DRINK_CON:
	    case ITEM_POTION:   msg = "$p freezes and shatters!"; break;
	    }

	    act( msg, victim, obj_lose, NULL, TO_CHAR );
	    extract_obj( obj_lose );
	}
    }

    hpch = UMAX( 10, ch->hit );
    dam  = number_range( hpch/16+1, hpch/8 );
    if ( saves_spell( level, victim ) )
	dam /= 2;
    damage( ch, victim, dam, sn );
    return;
}



void spell_gas_breath( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *vch;
    CHAR_DATA *vch_next;
    int dam;
    int hpch;

    for ( vch = ch->in_room->people; vch != NULL; vch = vch_next )
    {
	vch_next = vch->next_in_room;
	if ( IS_NPC(ch) ? !IS_NPC(vch) : IS_NPC(vch) )
	{
	    hpch = UMAX( 10, ch->hit );
	    dam  = number_range( hpch/16+1, hpch/8 );
	    if ( saves_spell( level, vch ) )
		dam /= 2;
	    damage( ch, vch, dam, sn );
	}
    }
    return;
}



void spell_lightning_breath( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    int dam;
    int hpch;

    hpch = UMAX( 10, ch->hit );
    dam = number_range( hpch/16+1, hpch/8 );
    if ( saves_spell( level, victim ) )
	dam /= 2;
    damage( ch, victim, dam, sn );
    return;
}

/*
 * Code for Psionicist spells/skills by Thelonius
 */
void spell_adrenaline_control ( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA  *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
        return;

    af.type	 = sn;
    af.duration	 = level - 5;
    af.location	 = APPLY_DEX;
    af.modifier	 = 2;
    af.bitvector = 0;
    affect_to_char( victim, &af );

    af.location	= APPLY_CON;
    affect_to_char( victim, &af );

    send_to_char( "You have given yourself an adrenaline rush!\n\r", ch );
    act( "$n has given $mself an adrenaline rush!", ch, NULL, NULL,
	TO_ROOM );
   
    return;
}



void spell_agitation ( int sn, int level, CHAR_DATA *ch, void *vo )
{
                 CHAR_DATA *victim       = (CHAR_DATA *) vo;
    static const int        dam_each [ ] =
    {
	0,
	 0,  0,  0,  0,  0,      12, 15, 18, 21, 24,
	24, 24, 25, 25, 26,      26, 26, 27, 27, 27,
	28, 28, 28, 29, 29,      29, 30, 30, 30, 31,
	31, 31, 32, 32, 32,      33, 33, 33, 34, 34,
	34, 35, 35, 35, 36,      36, 36, 37, 37, 37
    };
		 int        dam;

    level    = UMIN( level, sizeof( dam_each ) / sizeof( dam_each[0] ) - 1 );
    level    = UMAX( 0, level );
    dam	     = number_range( dam_each[level] / 2, dam_each[level] * 2 );
   
    if ( saves_spell( level, victim ) )
      dam /= 2;
    damage( ch, victim, dam, sn );
    return;
}



void spell_aura_sight ( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
    char      *msg;
    int        ap;
   
    ap = victim->alignment;

    if ( ap >  700 ) msg = "$N has an aura as white as the driven snow.";
    else if ( ap >  350 ) msg = "$N is of excellent moral character.";
    else if ( ap >  100 ) msg = "$N is often kind and thoughtful.";
    else if ( ap > -100 ) msg = "$N doesn't have a firm moral commitment.";
    else if ( ap > -350 ) msg = "$N lies to $S friends.";
    else if ( ap > -700 ) msg = "Don't bring $N home to meet your family.";
    else msg = "Uh, check please!";

    act( msg, ch, NULL, victim, TO_CHAR );
}



void spell_awe ( int sn, int level, CHAR_DATA *ch, void *vo )
  {
    CHAR_DATA *victim = (CHAR_DATA *) vo;

    if ( victim->fighting == ch && !saves_spell( level, victim ) )
    {
	stop_fighting ( victim, TRUE);
	act( "$N is in AWE of you!", ch, NULL, victim, TO_CHAR    );
	act( "You are in AWE of $n!",ch, NULL, victim, TO_VICT    );
	act( "$N is in AWE of $n!",  ch, NULL, victim, TO_NOTVICT );
    }
    return;
}



void spell_ballistic_attack ( int sn, int level, CHAR_DATA *ch, void *vo )
  {
                 CHAR_DATA *victim       = (CHAR_DATA *) vo;
    static const int        dam_each [ ] =
    {
	 0,
	 3,  4,  4,  5,  6,       6,  6,  7,  7,  7,
	 7,  7,  8,  8,  8,       9,  9,  9, 10, 10,
	10, 11, 11, 11, 12,      12, 12, 13, 13, 13,
	14, 14, 14, 15, 15,      15, 16, 16, 16, 17,
	17, 17, 18, 18, 18,      19, 19, 19, 20, 20
    };
		 int        dam;
	
    level    = UMIN( level, sizeof( dam_each ) / sizeof( dam_each[0] ) - 1 );
    level    = UMAX( 0, level );
    dam	     = number_range( dam_each[level] / 2, dam_each[level] * 2 );
    if ( saves_spell( level, victim ) )
      dam /= 2;
    act( "You chuckle as a stone strikes $N.", ch, NULL, victim,
	TO_CHAR );
    damage( ch, victim, dam, sn);
    return;
}



void spell_biofeedback ( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA  *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;
   
    if ( IS_AFFECTED( victim, AFF_SANCTUARY ) )
        return;

    af.type      = sn;
    af.duration  = number_fuzzy( level / 8 );
    af.location  = APPLY_NONE;
    af.modifier  = 0;
    af.bitvector = AFF_SANCTUARY;
    affect_to_char( victim, &af );

    send_to_char( "You are surrounded by a white aura.\n\r", victim );
    act( "$n is surrounded by a white aura.", victim, NULL, NULL, TO_ROOM );
    return;
}



void spell_cell_adjustment ( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;
   
    if ( is_affected( victim, gsn_poison ) )
    {
	affect_strip( victim, gsn_poison );
	send_to_char( "A warm feeling runs through your body.\n\r", victim );
	act( "$N looks better.", ch, NULL, victim, TO_NOTVICT );
    }
    if ( is_affected( victim, gsn_curse  ) )
    {
	affect_strip( victim, gsn_curse  );
	send_to_char( "You feel better.\n\r", victim );
    }	
    send_to_char( "Ok.\n\r", ch );
    return;
}



void spell_combat_mind ( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA  *victim = (CHAR_DATA *) vo;
    AFFECT_DATA af;

    if ( is_affected( victim, sn ) )
    {
	if ( victim == ch )
	  send_to_char( "You already understand battle tactics.\n\r",
		       victim );
	else
	  act( "$N already understands battle tactics.",
	      ch, NULL, victim, TO_CHAR );
	return;
    }

    af.type	 = sn;
    af.duration	 = level + 3;
    af.location	 = APPLY_HITROLL;
    af.modifier	 = level / 6;
    af.bitvector = 0;
    affect_to_char( victim, &af );

    af.location	 = APPLY_AC;
    af.modifier	 = - level/2 - 5;
    affect_to_char( victim, &af );

    if ( victim != ch )
        send_to_char( "OK.\n\r", ch );
    send_to_char( "You gain a keen understanding of battle tactics.\n\r",
		 victim );
    return;
}



void spell_complete_healing ( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *victim = (CHAR_DATA *) vo;

    victim->hit = victim->max_hit;
    update_pos( victim );
    if ( ch != victim )
        send_to_char( "Ok.\n\r", ch );
    send_to_char( "Ahhhhhh...You are completely healed!\n\r", victim );
    return;
}



void spell_control_flames ( int sn, int level, CHAR_DATA *ch, void *vo )
{
                 CHAR_DATA *victim       = (CHAR_DATA *) vo;
    static const int        dam_each [ ] = 
    {
	 0,
	 0,  0,  0,  0,  0,       0,  0, 16, 20, 24,
	28, 32, 35, 38, 40,      42, 44, 45, 45, 45,
	46, 46, 46, 47, 47,      47, 48, 48, 48, 49,
	49, 49, 50, 50, 50,      51, 51, 51, 52, 52,
	52, 53, 53, 53, 54,      54, 54, 55, 55, 55
    };
		 int        dam;

    if ( !get_eq_char( ch, WEAR_LIGHT ) )
    {
	send_to_char( "You must be carrying a light source.\n\r", ch );
	return;
    }

    level    = UMIN( level, sizeof( dam_each ) / sizeof( dam_each[0] ) - 1 );
    level    = UMAX( 0, level );
    dam	     = number_range( dam_each[level] / 2, dam_each[level] * 2 );
    if ( saves_spell( level, victim ) )
        dam /= 2;
    damage( ch, victim, dam, sn );
    return;
}



void spell_create_sound ( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *vch;
    char       buf1    [ MAX_STRING_LENGTH ];
    char       buf2    [ MAX_STRING_LENGTH ];
    char       speaker [ MAX_INPUT_LENGTH  ];

    target_name = one_argument( target_name, speaker );

    sprintf( buf1, "%s says '%s'.\n\r", speaker, target_name );
    sprintf( buf2, "Someone makes %s say '%s'.\n\r", speaker, target_name );
    buf1[0] = UPPER( buf1[0] );

    for ( vch = ch->in_room->people; vch; vch = vch->next_in_room )
    {
	if ( !is_name( speaker, vch->name ) )
	    send_to_char( saves_spell( level, vch ) ? buf2 : buf1, vch );
    }
    return;
}



void spell_death_field ( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *vch;
    CHAR_DATA *vch_next;
    int        dam;
    int        hpch;

    if ( !IS_EVIL( ch ) )
    {
	send_to_char( "You are not evil enough to do that!\n\r", ch);
	return;
    }

    send_to_char( "A black haze emanates from you!\n\r", ch );
    act ( "A black haze emanates from $n!", ch, NULL, ch, TO_ROOM );

    for ( vch = ch->in_room->people; vch; vch = vch_next )
    {
        vch_next = vch->next_in_room;
//@@@	if ( vch->deleted )
//@@@	  continue;

	if ( !IS_NPC( ch ) ? IS_NPC( vch ) : IS_NPC( vch ) )
	{
	    hpch = URANGE( 10, ch->hit, 999 );
	    if ( !saves_spell( level, vch )
		&& (   level <= vch->level + 5
		    && level >= vch->level - 5 ) )
            {
		dam = 4; /* Enough to compensate for sanct. and prot. */
		vch->hit = 1;
		update_pos( vch );
		send_to_char( "The haze envelops you!\n\r", vch );
		act( "The haze envelops $N!", ch, NULL, vch, TO_ROOM );
            }
	    else
	        dam = number_range( hpch / 16 + 1, hpch / 8 );

	    damage( ch, vch, dam, sn );
        }
    }
    return;
}



void spell_detonate ( int sn, int level, CHAR_DATA *ch, void *vo )
{
                 CHAR_DATA *victim       = (CHAR_DATA *) vo;
    static const int        dam_each [ ] =
    {
	  0,
	  0,   0,   0,   0,   0,        0,   0,   0,   0,   0,
	  0,   0,   0,   0,   0,        0,   0,   0,   0,  75,
	 80,  85,  90,  95, 100,      102, 104, 106, 108, 110,
	112, 114, 116, 118, 120,      122, 124, 126, 128, 130,
	132, 134, 136, 138, 140,      142, 144, 146, 148, 150
    };
		 int        dam;

    level    = UMIN( level, sizeof( dam_each ) / sizeof( dam_each[0] ) - 1 );
    level    = UMAX( 0, level );
    dam	     = number_range( dam_each[level] / 2, dam_each[level] * 2 );
    if ( saves_spell( level, victim ) )
        dam /= 2;
    damage( ch, victim, dam, sn );
    return;
}



void spell_disintegrate ( int sn, int level, CHAR_DATA *ch, void *vo )
{
    CHAR_DATA *vic

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区精品久久99| 国产不卡一区视频| 中文幕一区二区三区久久蜜桃| 日本道精品一区二区三区| 韩国女主播成人在线| 亚洲第一福利一区| 日韩伦理av电影| 久久亚洲精品小早川怜子| 在线不卡免费欧美| 色香蕉久久蜜桃| 丁香婷婷深情五月亚洲| 久久精品免费看| 香蕉久久一区二区不卡无毒影院 | 久久激五月天综合精品| 亚洲高清中文字幕| 中文字幕一区二区三区av| 久久美女艺术照精彩视频福利播放 | 97aⅴ精品视频一二三区| 国内精品伊人久久久久av影院| 五月婷婷欧美视频| 亚洲欧美二区三区| 日韩美女视频一区| 中文字幕亚洲欧美在线不卡| 国产亚洲精品福利| 久久久久久一二三区| 欧美成人一区二区三区| 51久久夜色精品国产麻豆| 欧美视频自拍偷拍| 欧美色窝79yyyycom| 日本韩国一区二区| 欧洲精品视频在线观看| 91麻豆高清视频| 91美女视频网站| 91麻豆国产香蕉久久精品| 91同城在线观看| 精品一区二区三区免费视频| 亚洲午夜精品网| 国产精品视频线看| 国产午夜三级一区二区三| 久久日韩粉嫩一区二区三区| 日韩欧美国产综合一区| 日韩精品专区在线影院观看 | 久久一区二区视频| 精品久久久久一区| 久久综合九色综合97婷婷 | 国产精品第13页| 欧美高清一级片在线观看| 国产精品乱码一区二区三区软件 | 日日摸夜夜添夜夜添精品视频| 亚洲国产一区在线观看| 日韩激情视频在线观看| 久久国产精品色| 国产福利一区二区三区| 99久久久精品| 在线区一区二视频| 欧美精选在线播放| 欧洲精品在线观看| 欧美一区永久视频免费观看| 日韩一区二区三区四区五区六区| 欧美mv日韩mv国产网站app| 久久精品亚洲国产奇米99| 国产精品不卡在线| 午夜电影一区二区| 韩国一区二区在线观看| 成a人片国产精品| 欧美日韩国产一级| 久久先锋影音av鲁色资源网| 中文字幕一区免费在线观看 | 久久国产精品99精品国产| 国产精品18久久久久久久久| 一本一道波多野结衣一区二区| 欧美一区国产二区| 国产精品麻豆一区二区| 亚洲va在线va天堂| 国产精品白丝av| 欧洲中文字幕精品| 国产亚洲成年网址在线观看| 一区二区三区蜜桃网| 国产一区二区三区在线观看免费| 91视频精品在这里| 精品免费一区二区三区| 亚洲精品福利视频网站| 激情五月婷婷综合| 欧美日韩中字一区| 国产日韩欧美不卡在线| 污片在线观看一区二区| 成人午夜精品一区二区三区| 欧美精品自拍偷拍| 国产精品国产自产拍在线| 免费看黄色91| 一本大道久久a久久综合| 精品国产一区二区三区忘忧草| 亚洲日本在线看| 精品系列免费在线观看| 欧美三级电影一区| 中文字幕不卡在线观看| 免费xxxx性欧美18vr| 色老汉av一区二区三区| 精品国产一区二区在线观看| 亚洲va欧美va人人爽午夜| 不卡的av电影| 久久午夜国产精品| 日韩黄色免费网站| 在线观看免费视频综合| 欧美韩国日本一区| 精品夜夜嗨av一区二区三区| 欧美日韩亚洲综合在线| 久久女同精品一区二区| 婷婷国产v国产偷v亚洲高清| eeuss鲁一区二区三区| 精品人在线二区三区| 亚洲成av人片在线观看| 91亚洲午夜精品久久久久久| 国产午夜精品一区二区三区嫩草 | 日本不卡在线视频| 欧美私模裸体表演在线观看| 一区在线播放视频| 成人在线视频一区| 国产欧美日产一区| 精品一区二区免费在线观看| 欧美日韩1234| 亚瑟在线精品视频| 欧美日韩国产a| 亚洲国产裸拍裸体视频在线观看乱了 | 极品少妇xxxx精品少妇| 91精品福利在线一区二区三区| 亚洲成人一区二区在线观看| 欧洲视频一区二区| 亚洲高清中文字幕| 精品视频1区2区| 亚洲一区二区三区小说| 欧美午夜电影网| 偷拍日韩校园综合在线| 欧美日本一道本| 青娱乐精品视频| 精品国产电影一区二区| 精品一区二区综合| 久久久噜噜噜久久中文字幕色伊伊 | 经典三级视频一区| 久久婷婷综合激情| 国产精品一区二区三区乱码| 国产亚洲午夜高清国产拍精品| 国产福利不卡视频| 国产精品麻豆欧美日韩ww| www.激情成人| 亚洲一区视频在线| 在线不卡中文字幕播放| 精品亚洲国内自在自线福利| 国产欧美日韩另类一区| 99国产欧美久久久精品| 亚洲综合在线第一页| 欧美日本视频在线| 国产在线不卡视频| 国产精品久久久久久久第一福利 | 欧美一区二区三区系列电影| 青青草精品视频| 久久精品视频一区二区三区| 成人国产电影网| 亚洲电影一区二区| 精品欧美一区二区三区精品久久| 粉嫩aⅴ一区二区三区四区五区| ...xxx性欧美| 制服丝袜成人动漫| 国产精品自拍av| 亚洲综合色成人| 久久精品一二三| 91亚洲国产成人精品一区二区三| 亚洲电影在线播放| 久久亚洲二区三区| 日本精品一级二级| 理论电影国产精品| 国产精品久久久久久久蜜臀| 欧美群妇大交群中文字幕| 精品一区二区免费看| 亚洲男女一区二区三区| 日韩欧美在线1卡| 99久免费精品视频在线观看| 日韩电影免费一区| 中文字幕在线不卡国产视频| 在线播放日韩导航| 成人av动漫在线| 免费成人av资源网| 亚洲免费看黄网站| 精品久久久三级丝袜| 欧美午夜免费电影| 成人黄色a**站在线观看| 青青青伊人色综合久久| 亚洲黄一区二区三区| 久久综合九色综合97_久久久| 欧美视频日韩视频在线观看| 国产91丝袜在线播放0| 秋霞电影网一区二区| 夜夜嗨av一区二区三区中文字幕| 欧美xxx久久| 欧美日韩电影在线播放| 99免费精品在线观看| 国产一区福利在线| 午夜精品一区二区三区三上悠亚| 中文字幕一区二区在线播放| 久久网站最新地址|