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

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

?? battle.c

?? 最新的仙鏡傳說服務器C語言源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*==========================================
 * 廋楙僟儊乕僕
 *------------------------------------------
 */
int battle_addmastery(struct map_session_data *sd,struct block_list *target,int dmg,int type)
{
	int damage,skill;
	int race=battle_get_race(target);
	int weapon;
	damage = 0;

	// 僨乕儌儞儀僀儞(+3 乣 +30) vs 晄巰 or 埆杺 (巰恖偼娷傔側偄丠)
	if((skill = pc_checkskill(sd,AL_DEMONBANE)) > 0 && (battle_check_undead(race,battle_get_elem_type(target)) || race==6) ) 
		damage += (skill * 3);

	// 價乕僗僩儀僀儞(+4 乣 +40) vs 摦暔 or 崺拵
	if((skill = pc_checkskill(sd,HT_BEASTBANE)) > 0 && (race==2 || race==4) ) 
		damage += (skill * 4);

	if(type == 0)
		weapon = sd->weapontype1;
	else
		weapon = sd->weapontype2;
	switch(weapon)
	{
		case 0x01:	// 抁寱 (Updated By AppleGirl)
		case 0x02:	// 1HS
		{
			// 寱廋楙(+4 乣 +40) 曅庤寱 抁寱娷傓
			if((skill = pc_checkskill(sd,SM_SWORD)) > 0) {
				damage += (skill * 4);
			}
			break;
		}
		case 0x03:	// 2HS
		{
			// 椉庤寱廋楙(+4 乣 +40) 椉庤寱
			if((skill = pc_checkskill(sd,SM_TWOHAND)) > 0) {
				damage += (skill * 4);
			}
			break;
		}
		case 0x04:	// 1HL
		{
			// 憚廋楙(+4 乣 +40,+5 乣 +50) 憚
			if((skill = pc_checkskill(sd,KN_SPEARMASTERY)) > 0) {
				if(!pc_isriding(sd))
					damage += (skill * 4);	// 儁僐偵忔偭偰側偄
				else
					damage += (skill * 5);	// 儁僐偵忔偭偰傞
			}
			break;
		}
		case 0x05:	// 2HL
		{
			// 憚廋楙(+4 乣 +40,+5 乣 +50) 憚
			if((skill = pc_checkskill(sd,KN_SPEARMASTERY)) > 0) {
				if(!pc_isriding(sd))
					damage += (skill * 4);	// 儁僐偵忔偭偰側偄
				else
					damage += (skill * 5);	// 儁僐偵忔偭偰傞
			}
			break;
		}
		case 0x06:	// 曅庤晙
		{
			if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) {
				damage += (skill * 3);
			}
			break;
		}
		case 0x07: // Axe by Tato
		{
			if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) {
				damage += (skill * 3);
			}
			break;
		}
		case 0x08:	// 儊僀僗
		{
			// 儊僀僗廋楙(+3 乣 +30) 儊僀僗
			if((skill = pc_checkskill(sd,PR_MACEMASTERY)) > 0) {
				damage += (skill * 3);
			}
			break;
		}
		case 0x09:	// 側偟?
			break;
		case 0x0a:	// 忨
			break;
		case 0x0b:	// 媩
			break;
		case 0x00:	// 慺庤
		case 0x0c:	// Knuckles
		{
			// 揝対(+3 乣 +30) 慺庤,僫僢僋儖
			if((skill = pc_checkskill(sd,MO_IRONHAND)) > 0) {
				damage += (skill * 3);
			}
			break;
		}
		case 0x0d:	// Musical Instrument
		{
			// 妝婍偺楙廗(+3 乣 +30) 妝婍
			if((skill = pc_checkskill(sd,BA_MUSICALLESSON)) > 0) {
				damage += (skill * 3);
			}
			break;
		}
		case 0x0e:	// Dance Mastery
		{
			// Dance Lesson Skill Effect(+3 damage for every lvl = +30) 曏
			if((skill = pc_checkskill(sd,DC_DANCINGLESSON)) > 0) {
				damage += (skill * 3);
			}
			break;
		}
		case 0x0f:	// Book
		{
			// Advance Book Skill Effect(+3 damage for every lvl = +30) {
			if((skill = pc_checkskill(sd,SA_ADVANCEDBOOK)) > 0) {
				damage += (skill * 3);
			}
			break;
		}
		case 0x10:	// Katars
		{
			// 僇僞乕儖廋楙(+3 乣 +30) 僇僞乕儖
			if((skill = pc_checkskill(sd,AS_KATAR)) > 0) {
				//僜僯僢僋僽儘乕帪偼暿張棟乮1寕偵晅偒1/8揔墳)
				damage += (skill * 3);
			}
			break;
		}
	}
	damage = dmg + damage;
	return (damage);
}

static struct Damage battle_calc_pet_weapon_attack(
	struct block_list *src,struct block_list *target,int skill_num,int skill_lv,int wflag)
{
	struct pet_data *pd = (struct pet_data *)src;
	struct mob_data *tmd=NULL;
	int hitrate,flee,cri = 0,atkmin,atkmax;
	int luk,target_count = 1;
	int def1 = battle_get_def(target);
	int def2 = battle_get_def2(target);
	int t_vit = battle_get_vit(target);
	struct Damage wd;
	int damage,damage2=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
	int flag;
	int t_mode=0,t_race=0,t_size=1,s_race=0,s_ele=0;
	struct status_change *t_sc_data;

	s_race=battle_get_race(src);
	s_ele=battle_get_attack_element(src);

	// 僞乕僎僢僩
	if(target->type == BL_MOB)
		tmd=(struct mob_data *)target;
	else {
		memset(&wd,0,sizeof(wd));
		return wd;
	}
	t_race=battle_get_race( target );
	t_size=battle_get_size( target );
	t_mode=battle_get_mode( target );
	t_sc_data=battle_get_sc_data( target );

	flag=BF_SHORT|BF_WEAPON|BF_NORMAL;	// 峌寕偺庬椶偺愝掕
	
	// 夞旔棪寁嶼丄夞旔敾掕偼屻偱
	flee = battle_get_flee(target);
	if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0)
		target_count += battle_counttargeted(target,src);
	if(battle_config.agi_penaly_type > 0) {
		if(target_count >= battle_config.agi_penaly_count) {
			if(battle_config.agi_penaly_type == 1)
				flee = (flee * (100 - (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num))/100;
			else if(battle_config.agi_penaly_type == 2)
				flee -= (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num;
			if(flee < 1) flee = 1;
		}
	}
	hitrate=battle_get_hit(src) - flee + 80;

	type=0;	// normal
	div_ = 1; // single attack

	luk=battle_get_luk(src);

	if(battle_config.pet_str)
		damage = battle_get_baseatk(src);
	else
		damage = 0;
	atkmin = battle_get_atk(src);
	atkmax = battle_get_atk2(src);
	if(mob_db[pd->class].range>3 )
		flag=(flag&~BF_RANGEMASK)|BF_LONG;

	if(atkmin > atkmax) atkmin = atkmax;

	cri = battle_get_critical(src);
	cri -= battle_get_luk(target) * 3;
	if(battle_config.enemy_critical_rate != 100) {
		cri = cri*battle_config.enemy_critical_rate/100;
		if(cri < 1)
			cri = 1;
	}
	if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 )
		cri <<=1;

	if(skill_num == 0 && skill_lv >= 0 && battle_config.enemy_critical && (rand() % 1000) < cri)
	{
		damage += atkmax;
		type = 0x0a;
	}
	else {
		int vitbonusmax;
	
		if(atkmax > atkmin)
			damage += atkmin + rand() % (atkmax-atkmin + 1);
		else
			damage += atkmin ;
		// 僗僉儖廋惓侾乮峌寕椡攞壔宯乯
		// 僆乕僶乕僩儔僗僩(+5% 乣 +25%),懠峌寕宯僗僉儖偺応崌偙偙偱曗惓
		// 僶僢僔儏,儅僌僫儉僽儗僀僋,
		// 儃乕儕儞僌僶僢僔儏,僗僺傾僽乕儊儔儞,僽儔儞僨傿僢僔儏僗僺傾,僗僺傾僗僞僢僽,
		// 儊儅乕僫僀僩,僇乕僩儗儃儕儏乕僔儑儞
		// 僟僽儖僗僩儗僀僼傿儞僌,傾儘乕僔儍儚乕,僠儍乕僕傾儘乕,
		// 僜僯僢僋僽儘乕
		if(skill_num>0){
			int i;
			if( (i=skill_get_pl(skill_num))>0 )
				s_ele=i;

			flag=(flag&~BF_SKILLMASK)|BF_SKILL;
			switch( skill_num ){
			case SM_BASH:		// 僶僢僔儏
				damage = damage*(100+ 30*skill_lv)/100;
				hitrate = (hitrate*(100+5*skill_lv))/100;
				break;
			case SM_MAGNUM:		// 儅僌僫儉僽儗僀僋
				damage = damage*(5*skill_lv +(wflag)?65:115 )/100;
				break;
			case MC_MAMMONITE:	// 儊儅乕僫僀僩
				damage = damage*(100+ 50*skill_lv)/100;
				break;
			case AC_DOUBLE:	// 僟僽儖僗僩儗僀僼傿儞僌
				damage = damage*(180+ 20*skill_lv)/100;
				div_=2;
				flag=(flag&~BF_RANGEMASK)|BF_LONG;
				break;
			case AC_SHOWER:	// 傾儘乕僔儍儚乕
				damage = damage*(75 + 5*skill_lv)/100;
				flag=(flag&~BF_RANGEMASK)|BF_LONG;
				break;
			case AC_CHARGEARROW:	// 僠儍乕僕傾儘乕
				damage = damage*150/100;
				flag=(flag&~BF_RANGEMASK)|BF_LONG;
				break;
			case KN_PIERCE:	// 僺傾乕僗
				damage = damage*(100+ 10*skill_lv)/100;
				hitrate = hitrate*(100+5*skill_lv)/100;
				div_=t_size+1;
				damage*=div_;
				break;
			case KN_SPEARSTAB:	// 僗僺傾僗僞僽
				damage = damage*(100+ 15*skill_lv)/100;
				break;
			case KN_SPEARBOOMERANG:	// 僗僺傾僽乕儊儔儞
				damage = damage*(100+ 50*skill_lv)/100;
				flag=(flag&~BF_RANGEMASK)|BF_LONG;
				break;
			case KN_BRANDISHSPEAR: // 僽儔儞僨傿僢僔儏僗僺傾
				damage = damage*(100+ 20*skill_lv)/100;
				if(skill_lv>3 && wflag==1) damage2+=damage/2;
				if(skill_lv>6 && wflag==1) damage2+=damage/4;
				if(skill_lv>9 && wflag==1) damage2+=damage/8;
				if(skill_lv>6 && wflag==2) damage2+=damage/2;
				if(skill_lv>9 && wflag==2) damage2+=damage/4;
				if(skill_lv>9 && wflag==3) damage2+=damage/2;
				damage +=damage2;
				blewcount=0;
				break;
			case KN_BOWLINGBASH:	// 儃僂儕儞僌僶僢僔儏
				damage = damage*(100+ 50*skill_lv)/100;
				blewcount=0;
				break;
			case AS_SONICBLOW:	// 僜僯僢僋僽儘僂
				damage = damage*(300+ 50*skill_lv)/100;
				div_=8;
				break;
			case TF_SPRINKLESAND:	// 嵒傑偒
				damage = damage*125/100;
				break;
			case MC_CARTREVOLUTION:	// 僇乕僩儗儃儕儏乕僔儑儞
				damage = (damage*150)/100;
				break;
			// 埲壓MOB
			case NPC_COMBOATTACK:	// 懡抜峌寕
				div_=skill_get_num(skill_num,skill_lv);
				damage *= div_;
				break;
			case NPC_RANDOMATTACK:	// 儔儞僟儉ATK峌寕
				damage = damage*(50+rand()%150)/100;
				break;
			// 懏惈峌寕乮揔摉乯
			case NPC_WATERATTACK:
			case NPC_GROUNDATTACK:
			case NPC_FIREATTACK:
			case NPC_WINDATTACK:
			case NPC_POISONATTACK:
			case NPC_HOLYATTACK:
			case NPC_DARKNESSATTACK:
			case NPC_TELEKINESISATTACK:
				damage = damage*(100+25*(skill_lv-1))/100;
				break;
			case NPC_GUIDEDATTACK:
				hitrate = 1000000;
				break;
			case NPC_RANGEATTACK:
				flag=(flag&~BF_RANGEMASK)|BF_LONG;
				break;
			case NPC_PIERCINGATT:
				flag=(flag&~BF_RANGEMASK)|BF_SHORT;
				break;
			case RG_BACKSTAP:	// 僶僢僋僗僞僽
				damage = damage*(300+ 40*skill_lv)/100;
				hitrate = 1000000;
				break;
			case RG_RAID:	// 僒僾儔僀僘傾僞僢僋
				damage = damage*(100+ 40*skill_lv)/100;
				break;
			case RG_INTIMIDATE:	// 僀儞僥傿儈僨僀僩
				damage = damage*(100+ 30*skill_lv)/100;
				break;
			case CR_SHIELDCHARGE:	// 僔乕儖僪僠儍乕僕
				damage = damage*(100+ 20*skill_lv)/100;
				flag=(flag&~BF_RANGEMASK)|BF_SHORT;
				s_ele = 0;
				break;
			case CR_SHIELDBOOMERANG:	// 僔乕儖僪僽乕儊儔儞
				damage = damage*(100+ 30*skill_lv)/100;
				flag=(flag&~BF_RANGEMASK)|BF_LONG;
				s_ele = 0;
				break;
			case CR_HOLYCROSS:	// 儂乕儕乕僋儘僗
				damage = damage*(100+ 35*skill_lv)/100;
				div_=2;
				break;
			case CR_GRANDCROSS:
				hitrate= 1000000;
				break;
			case MO_FINGEROFFENSIVE:	//巜抏
				damage = damage * (100 + 50 * skill_lv) / 100;
				div_ = 1;
				break;
			case MO_INVESTIGATE:	// 敪 櫎
				if(def1 < 1000000)
					damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100;
				hitrate = 1000000;
				s_ele = 0;
				break;
			case MO_EXTREMITYFIST:	// 垻廋梾攅朠対
				damage = damage * 8 + 250 + (skill_lv * 150);
				hitrate = 1000000;
				s_ele = 0;
				break;
			case MO_CHAINCOMBO:	// 楢懪彾
				damage = damage*(150+ 50*skill_lv)/100;
				div_=4;
				break;
			case MO_COMBOFINISH:	// 栆棿対
				damage = damage*(240+ 60*skill_lv)/100;
				break;
			case BA_MUSICALSTRIKE:	// 儈儏乕僕僇儖僗僩儔僀僋
				damage = damage*(100+ 50 * skill_lv)/100;
				flag=(flag&~BF_RANGEMASK)|BF_LONG;
				break;
			case DC_THROWARROW:	// 栴寕偪
				damage = damage*(100+ 50 * skill_lv)/100;
				flag=(flag&~BF_RANGEMASK)|BF_LONG;
				break;
			}
		}

		if( skill_num!=NPC_CRITICALSLASH ){
			// 懳 徾偺杊屼椡偵傛傞僟儊乕僕偺尭彮
			// 僨傿僶僀儞僾儘僥僋僔儑儞乮偙偙偱偄偄偺偐側丠乯
			if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000 ) {	//DEF, VIT柍帇
				int t_def;
				if(battle_config.vit_penaly_type > 0) {
					if(target_count >= battle_config.vit_penaly_count) {
						if(battle_config.vit_penaly_type == 1) {
							def1 = (def1 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
							def2 = (def2 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
							t_vit = (t_vit * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
						}
						else if(battle_config.vit_penaly_type == 2) {
							def1 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
							def2 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
							t_vit -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
						}
						if(def1 < 0) def1 = 0;
						if(def2 < 1) def2 = 1;
						if(t_vit < 1) t_vit = 1;
					}
				}
				t_def = def2*8/10;
				vitbonusmax = (t_vit/20)*(t_vit/20)-1;
				damage = damage * (100 - def1) /100

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久| 欧美电影免费观看高清完整版 | 国产精品午夜久久| 国产乱人伦偷精品视频不卡| 精品国产乱码久久久久久久久| 裸体在线国模精品偷拍| 亚洲精品在线免费观看视频| 国产最新精品免费| 国产精品久久99| 91视频com| 婷婷开心激情综合| 精品国产免费人成电影在线观看四季| 久久99精品国产| 中文字幕国产一区| 97久久精品人人爽人人爽蜜臀| 亚洲精品国产品国语在线app| 欧美色中文字幕| 久久99精品久久只有精品| 国产偷v国产偷v亚洲高清| 成a人片亚洲日本久久| 一区二区三区视频在线看| 4438成人网| 成人一区在线看| 亚洲不卡在线观看| 国产日本亚洲高清| 欧美私人免费视频| 国产精品亚洲第一区在线暖暖韩国| 1024国产精品| 日韩欧美国产一二三区| 91亚洲资源网| 激情五月激情综合网| 亚洲人成精品久久久久久| 欧美一区二区日韩| 99这里只有精品| 精品一区二区在线看| 亚洲美女屁股眼交3| 26uuu色噜噜精品一区| 色噜噜久久综合| 国产精品羞羞答答xxdd| 亚洲成人手机在线| 中文字幕va一区二区三区| 日韩视频一区二区在线观看| 97成人超碰视| 国产麻豆午夜三级精品| 亚洲成人动漫一区| **网站欧美大片在线观看| 欧美v亚洲v综合ⅴ国产v| 在线观看91精品国产入口| 国产成人免费视| 免费观看一级特黄欧美大片| 一区二区三区精品在线| 国产欧美综合在线观看第十页| 欧美裸体bbwbbwbbw| 91麻豆123| 国产精华液一区二区三区| 日本aⅴ免费视频一区二区三区 | 国产综合成人久久大片91| 亚洲午夜在线电影| 日韩理论片在线| 中文一区二区在线观看| 精品国产伦理网| 欧美成人欧美edvon| 欧美精品99久久久**| 在线亚洲人成电影网站色www| 成人手机电影网| 国产精品白丝av| 美女久久久精品| 青椒成人免费视频| 日本vs亚洲vs韩国一区三区二区| 一区二区三区视频在线观看| 中文字幕一区二区三区色视频| 国产丝袜在线精品| 久久久久成人黄色影片| 欧美成人国产一区二区| 日韩三区在线观看| 日韩无一区二区| 日韩亚洲国产中文字幕欧美| 欧美一区二区三区四区久久| 欧美日韩免费在线视频| 欧美精品日韩一区| 91精品国产手机| 欧美电影免费观看完整版| 精品国产99国产精品| 久久综合色之久久综合| 久久久久国产精品免费免费搜索| 久久九九99视频| 欧美激情在线看| 亚洲欧美另类在线| 亚洲国产视频一区二区| 丝瓜av网站精品一区二区| 日本欧美一区二区| 精品亚洲国内自在自线福利| 国产做a爰片久久毛片| 成人自拍视频在线观看| 在线视频欧美区| 91精品欧美久久久久久动漫| 欧美xxxxxxxx| 亚洲同性同志一二三专区| 亚洲国产中文字幕| 美腿丝袜亚洲色图| 国产黄色精品视频| 日本高清不卡视频| 91精品国产欧美一区二区18| 精品第一国产综合精品aⅴ| 日本一区二区三区在线不卡| 亚洲人一二三区| 日本欧美一区二区三区| 国产成人综合自拍| 欧美伊人久久大香线蕉综合69| 欧美精品电影在线播放| 国产免费成人在线视频| 亚洲一区日韩精品中文字幕| 老司机精品视频线观看86| 成人一级黄色片| 欧美日韩精品欧美日韩精品| 精品久久99ma| 依依成人精品视频| 激情综合色丁香一区二区| 色老综合老女人久久久| 日韩精品在线看片z| 亚洲美女电影在线| 久久精品国产精品青草| 91亚洲男人天堂| 日韩欧美精品三级| 亚洲一区二区三区四区五区中文 | 又紧又大又爽精品一区二区| 蜜臀av亚洲一区中文字幕| a美女胸又www黄视频久久| 7777精品伊人久久久大香线蕉完整版| 久久精品免视看| 天堂精品中文字幕在线| 成人激情动漫在线观看| 日韩一区二区三区四区五区六区| 国产精品电影一区二区三区| 欧美a级一区二区| 色天天综合久久久久综合片| 久久久久国产精品厨房| 免费看日韩精品| 欧美日韩在线三级| 成人免费在线播放视频| 国产盗摄一区二区三区| 欧美一级xxx| 亚洲国产精品久久艾草纯爱| 成人精品免费视频| 久久久久久夜精品精品免费| 日韩国产成人精品| 欧美视频精品在线| 一区二区三区精品久久久| 成人91在线观看| 国产日韩av一区二区| 国产一区二区三区在线观看免费视频| 欧洲国内综合视频| 亚洲免费观看高清完整| 99久久综合色| 欧美激情综合在线| 国产伦理精品不卡| 久久综合色8888| 久久精品国产秦先生| 欧美一区二区三区在线观看 | 毛片不卡一区二区| 欧美男男青年gay1069videost| 亚洲视频一区二区免费在线观看 | 一二三四区精品视频| 99精品视频中文字幕| 国产精品国产a| 丁香天五香天堂综合| 亚洲国产成人午夜在线一区| 国产成人在线观看| 国产欧美日韩综合精品一区二区| 国产乱人伦精品一区二区在线观看| 精品久久久久久久人人人人传媒 | 欧美高清视频一二三区| 亚洲国产欧美日韩另类综合| 91首页免费视频| 亚洲欧美日韩一区二区| 一本色道a无线码一区v| 亚洲一区二区三区美女| 欧美三区在线观看| 日本在线不卡一区| 精品久久久久久久久久久院品网 | 成人毛片视频在线观看| 欧美激情一区二区三区全黄| 国产激情一区二区三区| 国产精品天干天干在线综合| 9i在线看片成人免费| 亚洲成人av免费| 欧美电影免费观看高清完整版 | 欧美激情综合在线| 97久久精品人人爽人人爽蜜臀 | 1区2区3区国产精品| 欧美又粗又大又爽| 日韩不卡一二三区| wwww国产精品欧美| 91麻豆免费观看| 五月婷婷综合在线| 26uuu国产在线精品一区二区| 国产suv一区二区三区88区| 亚洲欧美日韩在线播放| 欧美一区二区三区小说| 丰满少妇在线播放bd日韩电影|