git-svn-id: https://svn.code.sf.net/p/rathena/svn/athena@354 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
d4cd760e3c
commit
636123d3cf
@ -2786,8 +2786,10 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
struct mob_data *tmd=NULL;
|
||||
int hitrate,flee,cri = 0,atkmin,atkmax;
|
||||
int dex,luk,target_count = 1;
|
||||
int no_cardfix=0;
|
||||
int def1 = battle_get_def(target);
|
||||
int def2 = battle_get_def2(target);
|
||||
// int mdef1, mdef2;
|
||||
int t_vit = battle_get_vit(target);
|
||||
struct Damage wd;
|
||||
int damage,damage2,damage3=0,damage4=0,type,div_,blewcount=skill_get_blewcount(skill_num,skill_lv);
|
||||
@ -3307,6 +3309,9 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
break;
|
||||
case CR_GRANDCROSS:
|
||||
hitrate= 1000000;
|
||||
if(!battle_config.gx_cardfix)
|
||||
|
||||
no_cardfix = 1;
|
||||
break;
|
||||
case AM_DEMONSTRATION: // デモンストレーション
|
||||
damage = damage*(100+ 20*skill_lv)/100;
|
||||
@ -3418,6 +3423,7 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
case ASC_METEORASSAULT: /* メテオアサルト */
|
||||
damage = damage*(40+ 40*skill_lv)/100;
|
||||
damage2 = damage2*(40+ 40*skill_lv)/100;
|
||||
no_cardfix = 1;
|
||||
break;
|
||||
case SN_SHARPSHOOTING: /* シャープシューティング */
|
||||
damage += damage*(30*skill_lv)/100;
|
||||
@ -3548,6 +3554,25 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 状態異常中のダメージ追加でクリティカルにも有効なスキル
|
||||
|
||||
if (sc_data) {
|
||||
|
||||
// エンチャントデッドリーポイズン
|
||||
|
||||
if(sc_data[SC_EDP].timer != -1) {
|
||||
|
||||
damage += damage * (150 + sc_data[SC_EDP].val1 * 50) / 100;
|
||||
|
||||
damage2 += damage2 * (150 + sc_data[SC_EDP].val1 * 50) / 100;
|
||||
|
||||
no_cardfix = 1;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 精錬ダメージの追加
|
||||
if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST) { //DEF, VIT無視
|
||||
damage += battle_get_atk2(src);
|
||||
@ -3614,7 +3639,7 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
//Advanced Katar Research by zanetheinsane
|
||||
if(sd->weapontype1 == 0x10 || sd->weapontype2 == 0x10){
|
||||
if((skill = pc_checkskill(sd,ASC_KATAR)) > 0) {
|
||||
damage += (damage*((skill*2)+10)) / 100 ;
|
||||
damage += damage*(10+(skill * 2))/100;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3667,8 +3692,8 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(skill_num != CR_GRANDCROSS || !battle_config.gx_cardfix)
|
||||
damage=damage*cardfix/100; //カード補正によるダメージ増加
|
||||
if(!no_cardfix)
|
||||
damage=damage*cardfix/100; //カード補正によるダメージ増加
|
||||
//カードによるダメージ増加処理ここまで
|
||||
|
||||
//カードによるダメージ追加処理(左手)ここから
|
||||
@ -3689,7 +3714,10 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(skill_num != CR_GRANDCROSS) damage2=damage2*cardfix/100; //カード補正による左手ダメージ増加
|
||||
if(!no_cardfix)
|
||||
|
||||
damage2=damage2*cardfix/100;
|
||||
//カード補正による左手ダメージ増加
|
||||
//カードによるダメージ増加処理(左手)ここまで
|
||||
|
||||
// -- moonsoul (cardfix for magic damage portion of ASC_BREAKER)
|
||||
@ -4465,6 +4493,12 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(battle_check_target(src,target,BCT_ENEMY) <= 0 &&
|
||||
|
||||
!battle_check_range(src,target,0))
|
||||
|
||||
return 0; // 攻撃対象外
|
||||
|
||||
race = battle_get_race(target);
|
||||
ele = battle_get_elem_type(target);
|
||||
if(battle_check_target(src,target,BCT_ENEMY) > 0 &&
|
||||
@ -5012,6 +5046,7 @@ static const struct {
|
||||
{ "player_skillup_limit", &battle_config.skillup_limit },
|
||||
{ "weapon_produce_rate", &battle_config.wp_rate },
|
||||
{ "potion_produce_rate", &battle_config.pp_rate },
|
||||
{ "deadly_potion_produce_rate", &battle_config.cdp_rate },
|
||||
{ "monster_active_enable", &battle_config.monster_active_enable },
|
||||
{ "monster_damage_delay_rate", &battle_config.monster_damage_delay_rate},
|
||||
{ "monster_loot_type", &battle_config.monster_loot_type },
|
||||
@ -5100,6 +5135,7 @@ static const struct {
|
||||
{ "making_arrow_name_input", &battle_config.making_arrow_name_input },
|
||||
{ "holywater_name_input", &battle_config.holywater_name_input },
|
||||
{ "display_delay_skill_fail", &battle_config.display_delay_skill_fail },
|
||||
{ "display_snatcher_skill_fail", &battle_config.display_snatcher_skill_fail },
|
||||
{ "chat_warpportal", &battle_config.chat_warpportal },
|
||||
{ "mob_warpportal", &battle_config.mob_warpportal },
|
||||
{ "dead_branch_active", &battle_config.dead_branch_active },
|
||||
@ -5114,6 +5150,7 @@ static const struct {
|
||||
{ "gx_cardfix", &battle_config.gx_cardfix },
|
||||
{ "gx_dupele", &battle_config.gx_dupele },
|
||||
{ "gx_disptype", &battle_config.gx_disptype },
|
||||
{ "devotion_level_difference", &battle_config.devotion_level_difference },
|
||||
{ "player_skill_partner_check", &battle_config.player_skill_partner_check},
|
||||
{ "hide_GM_session", &battle_config.hide_GM_session },
|
||||
{ "unit_movement_type", &battle_config.unit_movement_type },
|
||||
@ -5240,6 +5277,7 @@ void battle_set_defaults() {
|
||||
battle_config.skillup_limit = 0;
|
||||
battle_config.wp_rate=100;
|
||||
battle_config.pp_rate=100;
|
||||
battle_config.cdp_rate=100;
|
||||
battle_config.monster_active_enable=1;
|
||||
battle_config.monster_damage_delay_rate=100;
|
||||
battle_config.monster_loot_type=0;
|
||||
@ -5329,6 +5367,7 @@ void battle_set_defaults() {
|
||||
battle_config.making_arrow_name_input = 1;
|
||||
battle_config.holywater_name_input = 1;
|
||||
battle_config.display_delay_skill_fail = 1;
|
||||
battle_config.display_snatcher_skill_fail = 1;
|
||||
battle_config.chat_warpportal = 0;
|
||||
battle_config.mob_warpportal = 0;
|
||||
battle_config.dead_branch_active = 0;
|
||||
@ -5343,6 +5382,7 @@ void battle_set_defaults() {
|
||||
battle_config.gx_cardfix = 0;
|
||||
battle_config.gx_dupele = 1;
|
||||
battle_config.gx_disptype = 1;
|
||||
battle_config.devotion_level_difference = 10;
|
||||
battle_config.player_skill_partner_check = 1;
|
||||
battle_config.hide_GM_session = 0;
|
||||
battle_config.unit_movement_type = 0;
|
||||
|
@ -174,6 +174,7 @@ extern struct Battle_Config {
|
||||
int skillup_limit;
|
||||
int wp_rate;
|
||||
int pp_rate;
|
||||
int cdp_rate;
|
||||
int monster_active_enable;
|
||||
int monster_damage_delay_rate;
|
||||
int monster_loot_type;
|
||||
@ -262,6 +263,7 @@ extern struct Battle_Config {
|
||||
int making_arrow_name_input;
|
||||
int holywater_name_input;
|
||||
int display_delay_skill_fail;
|
||||
int display_snatcher_skill_fail;
|
||||
int chat_warpportal;
|
||||
int mob_warpportal;
|
||||
int dead_branch_active;
|
||||
@ -302,6 +304,7 @@ extern struct Battle_Config {
|
||||
int gx_cardfix;
|
||||
int gx_dupele;
|
||||
int gx_disptype;
|
||||
int devotion_level_difference;
|
||||
int player_skill_partner_check;
|
||||
int hide_GM_session;
|
||||
int unit_movement_type;
|
||||
|
@ -9002,6 +9002,10 @@ void clif_parse_MoveToKafra(int fd, struct map_session_data *sd) {
|
||||
if (item_index < 0 || item_index >= MAX_INVENTORY)
|
||||
return;
|
||||
|
||||
if(itemdb_isdropable(sd->status.inventory[item_index].nameid) == 0)
|
||||
|
||||
return;
|
||||
|
||||
if (sd->state.storage_flag)
|
||||
storage_guild_storageadd(sd, item_index, item_amount);
|
||||
else
|
||||
@ -10023,6 +10027,9 @@ static int clif_parse(int fd) {
|
||||
map_deliddb(&sd->bl); // account_id has been included in the DB before auth answer
|
||||
}
|
||||
close(fd);
|
||||
if (sd) // ’ljÁ
|
||||
|
||||
map_deliddb(&sd->bl); // ’ljÁ
|
||||
delete_session(fd);
|
||||
return 0;
|
||||
}
|
||||
|
@ -54,13 +54,25 @@ int guild_skill_get_inf(int id) { // Modified for new skills [Sara]
|
||||
int guild_skill_get_sp(int id,int lv){ return 0; }
|
||||
int guild_skill_get_range(int id){ return 0; }
|
||||
int guild_skill_get_max(int id) { // Modified for new skills [Sara]
|
||||
if (id==GD_EXTENSION) return 10;
|
||||
else if (id==GD_REGENERATION) return 3;
|
||||
if(id==GD_EXTENSION) return 10;
|
||||
else if(id==GD_REGENERATION) return 3;
|
||||
else return 1;
|
||||
}
|
||||
|
||||
// ギルドスキルがあるか確認
|
||||
int guild_checkskill(struct guild *g,int id){ return g->skill[id-10000].lv; }
|
||||
int guild_checkskill(struct guild *g,int id)
|
||||
{
|
||||
|
||||
int idx = id-GD_SKILLBASE;
|
||||
|
||||
|
||||
if (idx < 0 || idx >= MAX_GUILDSKILL)
|
||||
|
||||
return 0;
|
||||
|
||||
return g->skill[idx].lv;
|
||||
|
||||
}
|
||||
|
||||
|
||||
int guild_payexp_timer(int tid,unsigned int tick,int id,int data);
|
||||
@ -931,17 +943,20 @@ int guild_payexp(struct map_session_data *sd,int exp)
|
||||
int guild_skillup(struct map_session_data *sd,int skill_num,int flag)
|
||||
{
|
||||
struct guild *g;
|
||||
int idx;
|
||||
int idx = skill_num - GD_SKILLBASE;
|
||||
|
||||
nullpo_retr(0, sd);
|
||||
|
||||
if(idx < 0 || idx >= MAX_GUILDSKILL)
|
||||
|
||||
return 0;
|
||||
if(sd->status.guild_id==0 || (g=guild_search(sd->status.guild_id))==NULL)
|
||||
return 0;
|
||||
if(strcmp(sd->status.name,g->master))
|
||||
return 0;
|
||||
|
||||
if( (g->skill_point>0 || flag&1) &&
|
||||
g->skill[(idx=skill_num-10000)].id!=0 &&
|
||||
g->skill[idx].id!=0 &&
|
||||
g->skill[idx].lv < guild_skill_get_max(skill_num) ){
|
||||
intif_guild_skillup(g->guild_id,skill_num,sd->status.account_id,flag);
|
||||
}
|
||||
@ -958,7 +973,7 @@ int guild_skillupack(int guild_id,int skill_num,int account_id)
|
||||
if(g==NULL)
|
||||
return 0;
|
||||
if(sd!=NULL)
|
||||
clif_guild_skillup(sd,skill_num,g->skill[skill_num-10000].lv);
|
||||
clif_guild_skillup(sd,skill_num,g->skill[skill_num-GD_SKILLBASE].lv);
|
||||
// 全員に通知
|
||||
for(i=0;i<g->max_member;i++)
|
||||
if((sd=g->member[i].sd)!=NULL)
|
||||
|
@ -29,7 +29,7 @@
|
||||
#define NATURAL_HEAL_INTERVAL 500
|
||||
#define MAX_FLOORITEM 500000
|
||||
#define MAX_LEVEL 255
|
||||
#define MAX_WALKPATH 48
|
||||
#define MAX_WALKPATH 32
|
||||
#define MAX_DROP_PER_MAP 48
|
||||
#define MAX_IGNORE_LIST 80
|
||||
|
||||
@ -255,6 +255,7 @@ struct map_session_data {
|
||||
short autospell_id,autospell_lv,autospell_rate;
|
||||
short hp_drain_rate,hp_drain_per,sp_drain_rate,sp_drain_per;
|
||||
short hp_drain_rate_,hp_drain_per_,sp_drain_rate_,sp_drain_per_;
|
||||
short hp_drain_value,sp_drain_value,hp_drain_value_,sp_drain_value_;
|
||||
int short_weapon_damage_return,long_weapon_damage_return;
|
||||
int weapon_coma_ele[10],weapon_coma_race[12];
|
||||
short break_weapon_rate,break_armor_rate;
|
||||
@ -582,6 +583,7 @@ enum {
|
||||
SP_ADDEFF2,SP_BREAK_WEAPON_RATE,SP_BREAK_ARMOR_RATE,SP_ADD_STEAL_RATE, // 1067-1070
|
||||
SP_MAGIC_DAMAGE_RETURN,SP_RANDOM_ATTACK_INCREASE,SP_ALL_STATS,SP_AGI_VIT,SP_AGI_DEX_STR,SP_PERFECT_HIDE, // 1071-1076
|
||||
SP_DISGUISE,SP_CLASSCHANGE, // 1077-1078
|
||||
SP_HP_DRAIN_VALUE,SP_SP_DRAIN_VALUE, // 1079-1080
|
||||
|
||||
SP_RESTART_FULL_RECORVER=2000,SP_NO_CASTCANCEL,SP_NO_SIZEFIX,SP_NO_MAGIC_DAMAGE,SP_NO_WEAPON_DAMAGE,SP_NO_GEMSTONE, // 2000-2005
|
||||
SP_NO_CASTCANCEL2,SP_INFINITE_ENDURE,SP_UNBREAKABLE_WEAPON,SP_UNBREAKABLE_ARMOR // 2006-2009
|
||||
|
@ -1590,16 +1590,20 @@ static int mob_ai_sub_hard(struct block_list *bl,va_list ap)
|
||||
(dist=distance(md->bl.x,md->bl.y,abl->x,abl->y))>=32 || battle_check_target(bl,abl,BCT_ENEMY)==0)
|
||||
md->attacked_id=0;
|
||||
else {
|
||||
md->target_id=md->attacked_id; // set target
|
||||
md->state.targettype = ATTACKABLE;
|
||||
attack_type = 1;
|
||||
md->attacked_id=0;
|
||||
md->min_chase=dist+13;
|
||||
if(md->min_chase>26)
|
||||
md->min_chase=26;
|
||||
//距離が遠い場合はタゲを変更しない
|
||||
|
||||
if (!md->target_id || (distance(md->bl.x,md->bl.y,abl->x,abl->y)<3)) {
|
||||
md->target_id=md->attacked_id; // set target
|
||||
md->state.targettype = ATTACKABLE;
|
||||
attack_type = 1;
|
||||
md->attacked_id=0;
|
||||
md->min_chase=dist+13;
|
||||
if(md->min_chase>26)
|
||||
md->min_chase=26;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
md->state.master_check = 0;
|
||||
// Processing of slave monster
|
||||
@ -3040,7 +3044,7 @@ int mobskill_castend_id( int tid, unsigned int tick, int id,int data )
|
||||
|
||||
if(battle_config.mob_skill_log)
|
||||
printf("MOB skill castend skill=%d, class = %d\n",md->skillid,md->class);
|
||||
mob_stop_walking(md,0);
|
||||
// mob_stop_walking(md,0);
|
||||
|
||||
switch( skill_get_nk(md->skillid) )
|
||||
{
|
||||
@ -3171,7 +3175,7 @@ int mobskill_castend_pos( int tid, unsigned int tick, int id,int data )
|
||||
|
||||
if(battle_config.mob_skill_log)
|
||||
printf("MOB skill castend skill=%d, class = %d\n",md->skillid,md->class);
|
||||
mob_stop_walking(md,0);
|
||||
// mob_stop_walking(md,0);
|
||||
|
||||
skill_castend_pos2(&md->bl,md->skillx,md->skilly,md->skillid,md->skilllv,tick,0);
|
||||
|
||||
@ -3257,6 +3261,7 @@ int mobskill_use_id(struct mob_data *md,struct block_list *target,int skill_idx)
|
||||
|
||||
if(casttime>0 || forcecast){ // ‰r<E280B0>¥‚ª•K—v
|
||||
// struct mob_data *md2;
|
||||
mob_stop_walking(md,0); // 歩行停止
|
||||
clif_skillcasting( &md->bl,
|
||||
md->bl.id, target->id, 0,0, skill_id,casttime);
|
||||
|
||||
@ -3352,9 +3357,11 @@ int mobskill_use_pos( struct mob_data *md,
|
||||
printf("MOB skill use target_pos=(%d,%d) skill=%d lv=%d cast=%d, class = %d\n",
|
||||
skill_x,skill_y,skill_id,skill_lv,casttime,md->class);
|
||||
|
||||
if( casttime>0 ) // A cast time is required.
|
||||
if( casttime>0 ) { // A cast time is required.
|
||||
mob_stop_walking(md,0); // 歩行停止
|
||||
clif_skillcasting( &md->bl,
|
||||
md->bl.id, 0, skill_x,skill_y, skill_id,casttime);
|
||||
}
|
||||
|
||||
if( casttime<=0 ) // A skill without a cast time wont be cancelled.
|
||||
md->state.skillcastcancel=0;
|
||||
|
52
src/map/pc.c
52
src/map/pc.c
@ -2726,6 +2726,25 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
sd->hp_drain_rate_ += type2;
|
||||
sd->hp_drain_per_ += val;
|
||||
}
|
||||
break;
|
||||
case SP_HP_DRAIN_VALUE:
|
||||
|
||||
if(!sd->state.lr_flag) {
|
||||
|
||||
sd->hp_drain_rate += type2;
|
||||
|
||||
sd->hp_drain_value += val;
|
||||
|
||||
}
|
||||
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
|
||||
sd->hp_drain_rate_ += type2;
|
||||
|
||||
sd->hp_drain_value_ += val;
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
case SP_SP_DRAIN_RATE:
|
||||
if(!sd->state.lr_flag) {
|
||||
@ -2736,6 +2755,25 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
sd->sp_drain_rate_ += type2;
|
||||
sd->sp_drain_per_ += val;
|
||||
}
|
||||
break;
|
||||
case SP_SP_DRAIN_VALUE:
|
||||
|
||||
if(!sd->state.lr_flag) {
|
||||
|
||||
sd->sp_drain_rate += type2;
|
||||
|
||||
sd->sp_drain_value += val;
|
||||
|
||||
}
|
||||
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
|
||||
sd->sp_drain_rate_ += type2;
|
||||
|
||||
sd->sp_drain_value_ += val;
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
case SP_WEAPON_COMA_ELE:
|
||||
if(sd->state.lr_flag != 2)
|
||||
@ -3107,6 +3145,16 @@ int pc_dropitem(struct map_session_data *sd,int n,int amount)
|
||||
{
|
||||
nullpo_retr(1, sd);
|
||||
|
||||
if(n < 0 || n >= MAX_INVENTORY)
|
||||
|
||||
return 1;
|
||||
|
||||
|
||||
if(amount <= 0)
|
||||
|
||||
return 1;
|
||||
|
||||
|
||||
if (sd->status.inventory[n].nameid <= 0 ||
|
||||
sd->status.inventory[n].amount < amount ||
|
||||
sd->trade_partner != 0 || sd->vender_id != 0 ||
|
||||
@ -3240,8 +3288,10 @@ int pc_useitem(struct map_session_data *sd,int n)
|
||||
if(sd->inventory_data[n])
|
||||
run_script(sd->inventory_data[n]->use_script,0,sd->bl.id,0);
|
||||
|
||||
clif_useitemack(sd,n,amount-1,1);
|
||||
pc_delitem(sd,n,1,1);
|
||||
amount = sd->status.inventory[n].amount;
|
||||
|
||||
clif_useitemack(sd,n,amount,1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -232,7 +232,11 @@ int SkillStatusChangeTable[]={ /* skill.h
|
||||
-1,-1,
|
||||
SC_GOSPEL,
|
||||
/* 370- */
|
||||
-1,-1,-1,-1,-1,-1,-1,-1,SC_EDP,-1,
|
||||
-1,-1,-1,-1,-1,-1,-1,-1,
|
||||
|
||||
SC_EDP,
|
||||
|
||||
-1,
|
||||
/* 380- */
|
||||
SC_TRUESIGHT,
|
||||
-1,-1,
|
||||
@ -1053,8 +1057,8 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
|
||||
if((skill*15 + 55) + (skill2 = pc_checkskill(sd,TF_STEAL))*10 > rand()%1000) {
|
||||
if(pc_steal_item(sd,bl))
|
||||
clif_skill_nodamage(src,bl,TF_STEAL,skill2,1);
|
||||
//else
|
||||
// clif_skill_fail(sd,skillid,0,0); // it's annoying! =p [Celest]
|
||||
else if (battle_config.display_snatcher_skill_fail)
|
||||
clif_skill_fail(sd,skillid,0,0); // it's annoying! =p [Celest]
|
||||
}
|
||||
// エンチャントデットリ?ポイズン(猛毒?果)
|
||||
if (sd && sd->sc_data[SC_EDP].timer != -1 && rand() % 10000 < sd->sc_data[SC_EDP].val2 * sc_def_vit) {
|
||||
@ -2559,6 +2563,7 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
|
||||
case WZ_JUPITEL: /* ユピテルサンダ? */
|
||||
case NPC_MAGICALATTACK: /* MOB:魔法打?攻? */
|
||||
case PR_ASPERSIO: /* アスペルシオ */
|
||||
// case HW_NAPALMVULCAN: /* ƒiƒp<C692>[ƒ€ƒoƒ‹ƒJƒ“ */
|
||||
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
|
||||
break;
|
||||
|
||||
@ -2612,34 +2617,34 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
|
||||
}
|
||||
break;
|
||||
|
||||
case HW_NAPALMVULCAN: // Fixed By SteelViruZ
|
||||
if(flag&1){
|
||||
if(bl->id!=skill_area_temp[1]){
|
||||
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,
|
||||
skill_area_temp[0]);
|
||||
}
|
||||
}else{
|
||||
int ar=(skillid==HW_NAPALMVULCAN)?1:2;
|
||||
skill_area_temp[1]=bl->id;
|
||||
if(skillid==HW_NAPALMVULCAN){
|
||||
skill_area_temp[0]=0;
|
||||
map_foreachinarea(skill_area_sub,
|
||||
bl->m,bl->x-1,bl->y-1,bl->x+1,bl->y+1,0,
|
||||
src,skillid,skilllv,tick, flag|BCT_ENEMY ,
|
||||
skill_area_sub_count);
|
||||
}else{
|
||||
skill_area_temp[0]=0;
|
||||
skill_area_temp[2]=bl->x;
|
||||
skill_area_temp[3]=bl->y;
|
||||
}
|
||||
case HW_NAPALMVULCAN: // Fixed By SteelViruZ
|
||||
if(flag&1){
|
||||
if(bl->id!=skill_area_temp[1]){
|
||||
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,
|
||||
skill_area_temp[0] );
|
||||
map_foreachinarea(skill_area_sub,
|
||||
bl->m,bl->x-ar,bl->y-ar,bl->x+ar,bl->y+ar,0,
|
||||
src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
|
||||
skill_castend_damage_id);
|
||||
skill_area_temp[0]);
|
||||
}
|
||||
break;
|
||||
}else{
|
||||
int ar=(skillid==HW_NAPALMVULCAN)?1:2;
|
||||
skill_area_temp[1]=bl->id;
|
||||
if(skillid==HW_NAPALMVULCAN){
|
||||
skill_area_temp[0]=0;
|
||||
map_foreachinarea(skill_area_sub,
|
||||
bl->m,bl->x-1,bl->y-1,bl->x+1,bl->y+1,0,
|
||||
src,skillid,skilllv,tick, flag|BCT_ENEMY ,
|
||||
skill_area_sub_count);
|
||||
}else{
|
||||
skill_area_temp[0]=0;
|
||||
skill_area_temp[2]=bl->x;
|
||||
skill_area_temp[3]=bl->y;
|
||||
}
|
||||
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,
|
||||
skill_area_temp[0] );
|
||||
map_foreachinarea(skill_area_sub,
|
||||
bl->m,bl->x-ar,bl->y-ar,bl->x+ar,bl->y+ar,0,
|
||||
src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
|
||||
skill_castend_damage_id);
|
||||
}
|
||||
break;
|
||||
|
||||
case WZ_FROSTNOVA: /* フロストノヴァ */
|
||||
skill_castend_pos2(src,bl->x,bl->y,skillid,skilllv,tick,0);
|
||||
|
@ -311,6 +311,9 @@ enum { // struct map_session_data
|
||||
|
||||
SC_SPIDERWEB =180, /* スパイダ?ウェッブ */
|
||||
SC_MEMORIZE =181, /* メモライズ */
|
||||
// SC_DPOISON =182, /* 猛毒 */
|
||||
|
||||
// SC_EDP =183, /* エフェクトが判明したら移動 */
|
||||
|
||||
SC_WEDDING =187, //結婚用(結婚衣裳になって?くのが?いとか)
|
||||
SC_NOCHAT =188, //赤エモ?態
|
||||
@ -860,7 +863,8 @@ enum {
|
||||
CR_FULLPROTECTION,
|
||||
ITM_TOMAHAWK,
|
||||
|
||||
GD_APPROVAL=10000,
|
||||
// moved to common/mmo.h
|
||||
/* GD_APPROVAL=10000,
|
||||
GD_KAFRACONTACT=10001,
|
||||
GD_GUARDIANRESEARCH=10002,
|
||||
GD_GUARDUP=10003,
|
||||
@ -874,7 +878,7 @@ enum {
|
||||
GD_REGENERATION=10011,
|
||||
GD_RESTORE=10012,
|
||||
GD_EMERGENCYCALL=10013,
|
||||
GD_DEVELOPMENT=10014,
|
||||
GD_DEVELOPMENT=10014,*/
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user