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

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

?? battle.c

?? 最新的仙鏡傳說服務器C語言源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#include "battle.h"

#include "timer.h"

#include "map.h"
#include "pc.h"
#include "skill.h"
#include "mob.h"
#include "itemdb.h"
#include "clif.h"
#include "pet.h"
#include "guild.h"

int attr_fix_table[4][10][10];

struct Battle_Config battle_config;

static int distance(int x0,int y0,int x1,int y1)
{
	int dx,dy;

	dx=abs(x0-x1);
	dy=abs(y0-y1);
	return dx>dy ? dx : dy;
}

// 奺庬僷儔儊乕僞強摼

int battle_counttargeted(struct block_list *bl,struct block_list *src)
{
	if(bl->type == BL_PC)
		return pc_counttargeted((struct map_session_data *)bl,src);
	else if(bl->type == BL_MOB)
		return mob_counttargeted((struct mob_data *)bl,src);
	return 0;
}

int battle_get_class(struct block_list *bl)
{
	if(bl->type==BL_MOB)
		return ((struct mob_data *)bl)->class;
	else if(bl->type==BL_PC)
		return ((struct map_session_data *)bl)->status.class;
	else if(bl->type==BL_PET)
		return ((struct pet_data *)bl)->class;
	else
		return 0;
}
int battle_get_dir(struct block_list *bl)
{
	if(bl->type==BL_MOB)
		return ((struct mob_data *)bl)->dir;
	else if(bl->type==BL_PC)
		return ((struct map_session_data *)bl)->dir;
	else if(bl->type==BL_PET)
		return ((struct pet_data *)bl)->dir;
	else
		return 0;
}
int battle_get_lv(struct block_list *bl)
{
	if(bl->type==BL_MOB)
		return mob_db[((struct mob_data *)bl)->class].lv;
	else if(bl->type==BL_PC)
		return ((struct map_session_data *)bl)->status.base_level;
	else if(bl->type==BL_PET)
		return ((struct pet_data *)bl)->msd->pet.level;
	else
		return 0;
}
int battle_get_range(struct block_list *bl)
{
	if(bl->type==BL_MOB)
		return mob_db[((struct mob_data *)bl)->class].range;
	else if(bl->type==BL_PC)
		return ((struct map_session_data *)bl)->attackrange;
	else if(bl->type==BL_PET)
		return mob_db[((struct pet_data *)bl)->class].range;
	else
		return 0;
}
int battle_get_hp(struct block_list *bl)
{
	if(bl->type==BL_MOB)
		return ((struct mob_data *)bl)->hp;
	else if(bl->type==BL_PC)
		return ((struct map_session_data *)bl)->status.hp;
	else
		return 1;
}
int battle_get_max_hp(struct block_list *bl)
{
	if(bl->type==BL_PC)
		return ((struct map_session_data *)bl)->status.max_hp;
	else {
		struct status_change *sc_data=battle_get_sc_data(bl);
		int max_hp=1;
		if(bl->type==BL_MOB) {
			max_hp = mob_db[((struct mob_data*)bl)->class].max_hp;
			if(mob_db[((struct mob_data*)bl)->class].mexp > 0) {
				if(battle_config.mvp_hp_rate != 100)
					max_hp = (max_hp * battle_config.mvp_hp_rate)/100;
			}
			else {
				if(battle_config.monster_hp_rate != 100)
					max_hp = (max_hp * battle_config.monster_hp_rate)/100;
			}
		}
		else if(bl->type==BL_PET) {
			max_hp = mob_db[((struct pet_data*)bl)->class].max_hp;
			if(mob_db[((struct pet_data*)bl)->class].mexp > 0) {
				if(battle_config.mvp_hp_rate != 100)
					max_hp = (max_hp * battle_config.mvp_hp_rate)/100;
			}
			else {
				if(battle_config.monster_hp_rate != 100)
					max_hp = (max_hp * battle_config.monster_hp_rate)/100;
			}
		}
		if(sc_data) {
			if(sc_data[SC_APPLEIDUN].timer!=-1)
				max_hp += ((5+sc_data[SC_APPLEIDUN].val1*2+((sc_data[SC_APPLEIDUN].val2+1)>>1)
						+sc_data[SC_APPLEIDUN].val3/10) * max_hp)/100;
		}
		if(max_hp < 1) max_hp = 1;
		return max_hp;
	}
	return 1;
}
int battle_get_str(struct block_list *bl)
{
	int str=0;
	struct status_change *sc_data=battle_get_sc_data(bl);

	if(bl->type==BL_MOB)
		str = mob_db[((struct mob_data *)bl)->class].str;
	else if(bl->type==BL_PC)
		return ((struct map_session_data *)bl)->paramc[0];
	else if(bl->type==BL_PET)
		str = mob_db[((struct pet_data *)bl)->class].str;

	if(sc_data) {
		if(sc_data[SC_LOUD].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC)
			str += 4;
		if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){	// 僽儗僢僔儞僌
			int race=battle_get_race(bl);
			if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 )	str >>= 1;	// 埆 杺/晄巰
			else str += sc_data[SC_BLESSING].val1;	// 偦偺懠
		}
	}
	if(str < 0) str = 0;
	return str;
}
int battle_get_agi(struct block_list *bl)
{
	int agi=0;
	struct status_change *sc_data=battle_get_sc_data(bl);

	if(bl->type==BL_MOB)
		agi=mob_db[((struct mob_data *)bl)->class].agi;
	else if(bl->type==BL_PC)
		agi=((struct map_session_data *)bl)->paramc[1];
	else if(bl->type==BL_PET)
		agi=mob_db[((struct pet_data *)bl)->class].agi;

	if(sc_data) {
		if( sc_data[SC_INCREASEAGI].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1 &&
			bl->type != BL_PC)	// 懍搙憹壛(PC偼pc.c偱)
			agi += 2+sc_data[SC_INCREASEAGI].val1;

		if(sc_data[SC_CONCENTRATE].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC)
			agi += agi*(2+sc_data[SC_CONCENTRATE].val1)/100;

		if(sc_data[SC_DECREASEAGI].timer!=-1)	// 懍搙尭彮
			agi -= 2+sc_data[SC_DECREASEAGI].val1;

		if(sc_data[SC_QUAGMIRE].timer!=-1 )	// 僋傽僌儅僀傾
			agi >>= 1;
	}
	if(agi < 0) agi = 0;
	return agi;
}
int battle_get_vit(struct block_list *bl)
{
	int vit=0;
	struct status_change *sc_data=battle_get_sc_data(bl);
	if(bl->type==BL_MOB)
		vit=mob_db[((struct mob_data *)bl)->class].vit;
	else if(bl->type==BL_PC)
		vit=((struct map_session_data *)bl)->paramc[2];
	else if(bl->type==BL_PET)
		vit=mob_db[((struct pet_data *)bl)->class].vit;
	if(bl->type!=BL_PC && sc_data && sc_data[SC_STRIPARMOR].timer != -1)
		vit = vit*60/100;
	if(vit < 0) vit = 0;
	return vit;
}
int battle_get_int(struct block_list *bl)
{
	int int_=0;
	struct status_change *sc_data=battle_get_sc_data(bl);

	if(bl->type==BL_MOB)
		int_=mob_db[((struct mob_data *)bl)->class].int_;
	else if(bl->type==BL_PC)
		int_=((struct map_session_data *)bl)->paramc[3];
	else if(bl->type==BL_PET)
		int_=mob_db[((struct pet_data *)bl)->class].int_;

	if(sc_data) {
		if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){	// 僽儗僢僔儞僌
			int race=battle_get_race(bl);
			if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 )	int_ >>= 1;	// 埆 杺/晄巰
			else int_ += sc_data[SC_BLESSING].val1;	// 偦偺懠
		}
		if( sc_data[SC_STRIPHELM].timer != -1 && bl->type != BL_PC)
			int_ = int_*90/100;

	}
	if(int_ < 0) int_ = 0;
	return int_;
}
int battle_get_dex(struct block_list *bl)
{
	int dex=0;
	struct status_change *sc_data=battle_get_sc_data(bl);

	if(bl->type==BL_MOB)
		dex=mob_db[((struct mob_data *)bl)->class].dex;
	else if(bl->type==BL_PC)
		dex=((struct map_session_data *)bl)->paramc[4];
	else if(bl->type==BL_PET)
		dex=mob_db[((struct pet_data *)bl)->class].dex;

	if(sc_data) {
		if(sc_data[SC_CONCENTRATE].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC)
			dex += dex*(2+sc_data[SC_CONCENTRATE].val1)/100;

		if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){	// 僽儗僢僔儞僌
			int race=battle_get_race(bl);
			if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 )	dex >>= 1;	// 埆 杺/晄巰
			else dex += sc_data[SC_BLESSING].val1;	// 偦偺懠
		}

		if(sc_data[SC_QUAGMIRE].timer!=-1 )	// 僋傽僌儅僀傾
			dex >>= 1;
	}
	if(dex < 0) dex = 0;
	return dex;
}
int battle_get_luk(struct block_list *bl)
{
	int luk=0;
	struct status_change *sc_data=battle_get_sc_data(bl);

	if(bl->type==BL_MOB)
		luk=mob_db[((struct mob_data *)bl)->class].luk;
	else if(bl->type==BL_PC)
		luk=((struct map_session_data *)bl)->paramc[5];
	else if(bl->type==BL_PET)
		luk=mob_db[((struct pet_data *)bl)->class].luk;

	if(sc_data) {
		if(sc_data[SC_GLORIA].timer!=-1 && bl->type != BL_PC)	// 僌儘儕傾(PC偼pc.c偱)
			luk += 30;
		if(sc_data[SC_CURSE].timer!=-1 )		// 庺偄
			luk=0;
	}
	if(luk < 0) luk = 0;
	return luk;
}

int battle_get_flee(struct block_list *bl)
{
	int flee=1;
	struct status_change *sc_data=battle_get_sc_data(bl);

	if(bl->type==BL_PC)
		flee=((struct map_session_data *)bl)->flee;
	else
		flee=battle_get_agi(bl) + battle_get_lv(bl);

	if(sc_data) {
		if(sc_data[SC_WHISTLE].timer!=-1 && bl->type != BL_PC)
			flee += flee*(sc_data[SC_WHISTLE].val1+sc_data[SC_WHISTLE].val2
					+(sc_data[SC_WHISTLE].val3>>16))/100;
		if(sc_data[SC_BLIND].timer!=-1 && bl->type != BL_PC)
			flee -= flee*25/100;
	}
	if(flee < 1) flee = 1;
	return flee;
}
int battle_get_hit(struct block_list *bl)
{
	int hit=1;
	struct status_change *sc_data=battle_get_sc_data(bl);

	if(bl->type==BL_PC)
		hit=((struct map_session_data *)bl)->hit;
	else
		hit=battle_get_dex(bl) + battle_get_lv(bl);

	if(sc_data) {
		if(sc_data[SC_HUMMING].timer!=-1 && bl->type != BL_PC)	// 
			hit += hit*(sc_data[SC_HUMMING].val1*2+sc_data[SC_HUMMING].val2
					+sc_data[SC_HUMMING].val3)/100;
		if(sc_data[SC_BLIND].timer!=-1 && bl->type != BL_PC)		// 庺偄
			hit -= hit*25/100;
	}
	if(hit < 1) hit = 1;
	return hit;
}
int battle_get_flee2(struct block_list *bl)
{
	int flee2=1;
	struct status_change *sc_data=battle_get_sc_data(bl);

	if(bl->type==BL_PC) {
		flee2 = battle_get_luk(bl) + 10;
		flee2 += ((struct map_session_data *)bl)->flee2 - (((struct map_session_data *)bl)->paramc[5] + 10);
	}
	else
		flee2=battle_get_luk(bl)+1;

	if(sc_data) {
		if(sc_data[SC_WHISTLE].timer!=-1 && bl->type != BL_PC)
			flee2 += (sc_data[SC_WHISTLE].val1+sc_data[SC_WHISTLE].val2
					+(sc_data[SC_WHISTLE].val3&0xffff))*10;
	}
	if(flee2 < 1) flee2 = 1;
	return flee2;
}
int battle_get_critical(struct block_list *bl)
{
	int critical=1;
	struct status_change *sc_data=battle_get_sc_data(bl);

	if(bl->type==BL_PC) {
		critical = battle_get_luk(bl)*3 + 10;
		critical += ((struct map_session_data *)bl)->critical - ((((struct map_session_data *)bl)->paramc[5]*3) + 10);
	}
	else
		critical=battle_get_luk(bl)*3 + 1;

	if(sc_data) {
		if(sc_data[SC_FORTUNE].timer!=-1 && bl->type != BL_PC)
			critical += (10+sc_data[SC_FORTUNE].val1+sc_data[SC_FORTUNE].val2
					+sc_data[SC_FORTUNE].val3)*10;
		if(sc_data[SC_EXPLOSIONSPIRITS].timer!=-1 && bl->type != BL_PC)
			critical += sc_data[SC_EXPLOSIONSPIRITS].val2;
	}
	if(critical < 1) critical = 1;
	return critical;
}

int battle_get_baseatk(struct block_list *bl)
{
	struct status_change *sc_data=battle_get_sc_data(bl);
	int batk=1;
	if(bl->type == BL_PC)
		batk = ((struct map_session_data *)bl)->base_atk;
	else {
		int str,dstr;
		str = battle_get_str(bl);
		dstr = str/10;
		batk = dstr*dstr + str;
	}
	if(sc_data) {
		if(sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC)
			batk = batk*(100+2*sc_data[SC_PROVOKE].val1)/100;
		if(sc_data[SC_CURSE].timer!=-1 )
			batk -= batk*25/100;
	}
	if(batk < 1) batk = 1;
	return batk;
}

int battle_get_atk(struct block_list *bl)
{
	struct status_change *sc_data=battle_get_sc_data(bl);
	int atk=0;
	if(bl->type==BL_PC)
		atk = ((struct map_session_data*)bl)->watk;
	else if(bl->type==BL_MOB)
		atk = mob_db[((struct mob_data*)bl)->class].atk1;
	else if(bl->type==BL_PET)
		atk = mob_db[((struct pet_data*)bl)->class].atk1;

	if(sc_data) {
		if(sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC)
			atk = atk*(100+2*sc_data[SC_PROVOKE].val1)/100;
		if(sc_data[SC_CURSE].timer!=-1 )
			atk -= atk*25/100;
	}
	if(atk < 0) atk = 0;
	return atk;
}
int battle_get_atk_(struct block_list *bl)
{
	if(bl->type==BL_PC){
		int atk=((struct map_session_data*)bl)->watk_;

		if(((struct map_session_data *)bl)->sc_data[SC_CURSE].timer!=-1 )
			atk -= atk*25/100;
		return atk;
	}
	else
		return 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕日韩一区二区| 欧美视频在线不卡| 国产高清视频一区| 日本韩国一区二区三区| 4438x亚洲最大成人网| 国产亚洲欧美日韩在线一区| 亚洲欧洲精品成人久久奇米网| 一区二区激情视频| 国产麻豆精品theporn| 欧洲色大大久久| 久久综合色一综合色88| 亚洲一区二区成人在线观看| 激情六月婷婷久久| 欧美日韩高清一区二区三区| 国产精品私人影院| 韩国精品主播一区二区在线观看| 在线观看成人小视频| 国产人妖乱国产精品人妖| 卡一卡二国产精品| 欧美电影一区二区三区| 一区二区三区国产豹纹内裤在线| 国产精品18久久久久久久网站| 欧美视频三区在线播放| 日韩亚洲欧美中文三级| 亚欧色一区w666天堂| 欧美在线观看视频在线| 亚洲特级片在线| 成人性视频网站| 久久男人中文字幕资源站| 久久精品99久久久| 欧美videossexotv100| 久久精品久久久精品美女| 91精品综合久久久久久| 麻豆国产欧美一区二区三区| 欧美一区二区在线观看| 天天色天天操综合| 欧美色大人视频| 亚洲人成影院在线观看| 久久国产福利国产秒拍| 欧美日韩精品一区二区三区蜜桃 | 亚洲视频在线观看三级| 日韩经典一区二区| 欧美日韩精品一区二区三区四区| 亚洲欧洲精品天堂一级| 麻豆91免费观看| 日韩欧美中文一区| 丝袜a∨在线一区二区三区不卡| 精品一区二区在线播放| 欧美www视频| 成人免费毛片a| 欧美电视剧在线观看完整版| 免费视频最近日韩| 国产欧美视频一区二区三区| 91亚洲大成网污www| 国产精品国产自产拍高清av | 久久精品噜噜噜成人av农村| 67194成人在线观看| 青草国产精品久久久久久| 国产午夜精品在线观看| 在线观看av一区二区| 久久精品国内一区二区三区| 国产精品久久久久久久第一福利 | 亚洲精品一区在线观看| 99在线精品一区二区三区| 日本91福利区| 亚洲成人一二三| 亚洲人成网站精品片在线观看| 在线电影欧美成精品| 色琪琪一区二区三区亚洲区| 国产精品一卡二卡| 久久99精品久久久久| 美女看a上一区| 成人激情午夜影院| 555www色欧美视频| 国产精品女人毛片| 日韩电影一区二区三区| 成人午夜在线播放| 日本福利一区二区| 欧美视频中文字幕| 欧美一级一区二区| 欧美mv日韩mv国产网站| 久久精品夜色噜噜亚洲aⅴ| 亚洲精品久久7777| 亚洲欧美综合色| 男女男精品视频| 国产精品亚洲а∨天堂免在线| 狠狠久久亚洲欧美| 99热这里都是精品| 3d动漫精品啪啪1区2区免费 | 国产一区二区三区| 成人免费视频一区| 国产精华液一区二区三区| 亚洲第一搞黄网站| 99久久综合国产精品| 日韩欧美一区二区久久婷婷| 国产精品一区二区三区四区| 丁香一区二区三区| 精品粉嫩超白一线天av| 午夜在线成人av| 色综合夜色一区| 亚洲欧美自拍偷拍| av一区二区三区四区| 精品少妇一区二区三区在线播放| 亚洲午夜精品久久久久久久久| 成人动漫在线一区| 国产精品人人做人人爽人人添| 日韩电影在线一区二区三区| 亚洲一级片在线观看| 久久久午夜电影| av在线这里只有精品| 日本不卡的三区四区五区| 日本美女一区二区| 免费观看91视频大全| 青青草国产成人av片免费| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲午夜国产一区99re久久| 三级欧美韩日大片在线看| 午夜精品免费在线观看| 国产成人免费视频网站| www.日本不卡| 欧美日韩激情一区| 国产精品视频在线看| 亚洲理论在线观看| 国产主播一区二区| 欧美亚洲综合在线| 国产精品伦一区| 蜜桃视频一区二区三区 | 亚洲与欧洲av电影| 精品制服美女丁香| 欧美在线观看视频一区二区三区| 亚洲国产激情av| 亚洲成人激情自拍| 欧美性做爰猛烈叫床潮| 亚洲欧美激情小说另类| 成人精品一区二区三区四区| 欧美成人精品二区三区99精品| 久久亚洲综合色一区二区三区| 国产精品久久精品日日| 国产精品女人毛片| 国产一区欧美二区| 日韩欧美视频在线| 粉嫩av亚洲一区二区图片| 久久精品国产免费| 视频一区二区国产| xnxx国产精品| 丝袜诱惑亚洲看片| 91麻豆国产在线观看| 国产亚洲一二三区| 蜜桃av一区二区三区电影| 欧美午夜精品一区二区三区| 国产精品美女久久久久av爽李琼| 久久精品99国产精品| 欧美日韩精品一区二区天天拍小说| 中文字幕一区二区视频| 日本一区免费视频| 欧美顶级少妇做爰| 欧美性受xxxx黑人xyx| 中文字幕一区二区日韩精品绯色| 蜜桃av一区二区| 欧美日本一区二区三区| 精一区二区三区| 91精品欧美久久久久久动漫| 亚洲人吸女人奶水| 99精品欧美一区二区三区小说| 久久久久久久久久久久电影| 久久丁香综合五月国产三级网站| 欧美日韩国产高清一区| 亚洲一级在线观看| 欧美日韩国产成人在线免费| 亚洲成av人片在www色猫咪| 91国内精品野花午夜精品| 亚洲一区二区五区| 欧美精品18+| 免费观看日韩电影| 26uuu亚洲| 国产精品99久久久久久久女警| 精品国产一区二区三区久久久蜜月| 久久精品国产免费看久久精品| 欧美大片在线观看一区二区| 在线观看视频一区| 日本精品视频一区二区| 日韩一级二级三级| 亚洲精品一区二区在线观看| 欧美日韩精品高清| 成人做爰69片免费看网站| 图片区日韩欧美亚洲| 国产精品大尺度| 中文字幕乱码日本亚洲一区二区| 欧美在线免费视屏| av动漫一区二区| 成人激情小说网站| 国产成人精品aa毛片| 蜜桃av一区二区| 久久爱www久久做| 午夜精品免费在线| 一区二区高清免费观看影视大全 | 国产精品欧美一级免费| 91久久精品一区二区| 99视频一区二区| 日韩国产一二三区|