Bug Fixes

* Adjusted Falcon Assault to take arrow elements into effect. (bugreport:7572)
* Cleaned up Self Destruction damage calculation. (bugreport:8941)
* Cleaned up Dragon Breath damage calculation.
* Fixed Millennium Shield, Crush Strike, and Refresh durations. (bugreport:8981)
* Fixed Makibishi area of effect. (bugreport:8963)
* Cleaned up some MOBID_* defines.
This commit is contained in:
aleos89 2014-05-21 09:54:56 -04:00
parent 2732176786
commit 1d8bec3100
7 changed files with 94 additions and 63 deletions

View File

@ -544,7 +544,7 @@
//****
// Sniper
380,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, SN_SIGHT,Falcon Eyes
381,5,8,1,0,0x40,0,5,1,yes,0,0,0,misc,0,0x80, SN_FALCONASSAULT,Falcon Assault
381,5,8,1,-3,0x40,0,5,1,yes,0,0,0,misc,0,0x80, SN_FALCONASSAULT,Falcon Assault
382,9,8,1,-1,0,2,5,1,yes,0,0,13,weapon,0,0x0, SN_SHARPSHOOTING,Focused Arrow Strike
383,0,6,4,0,0x3,-1,10,1,yes,0,0,0,weapon,0,0x0, SN_WINDWALK,Wind Walker
@ -1021,7 +1021,7 @@
2264,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_F_SIDESLIDE,Front-Side Slide
2265,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_B_SIDESLIDE,Back-Side Slide
2266,0,0,0,0,0,0,4,0,no,0,0,0,none,0,0x0, NC_MAINFRAME,Mainframe Restructure
2267,0,6,4,-1,0xCA,2:3:4,3,1,no,0,0,0,misc,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2267,0,6,4,0,0xCA,2:3:4,3,1,no,0,0,0,weapon,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2268,0,6,4,0,0x1,0,4,1,yes,0,0,0,none,0,0x0, NC_SHAPESHIFT,Shape Shift
2269,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, NC_EMERGENCYCOOL,Emergency Cool
2270,0,6,4,0,0x3,7,1,1,yes,0,0,0,none,0,0x0, NC_INFRAREDSCAN,Infrared Scan

View File

@ -1091,11 +1091,11 @@
//-- RK_DRAGONHOWLING
2009,0,0,0,15000,0,10000,-1
//-- RK_MILLENNIUMSHIELD
2011,0,1000,0,180000,0,60000,-1
2011,0,1000,0,180000,60000,60000,-1
//-- RK_CRUSHSTRIKE
2012,0,0,0,30000,0,30000,1000
2012,0,0,0,30000,30000,30000,1000
//-- RK_REFRESH
2013,0,0,0,60000,0,120000,1000
2013,0,0,0,60000,120000,120000,1000
//-- RK_GIANTGROWTH
2014,0,0,0,180000,0,0,1000
//-- RK_STONEHARDSKIN

View File

@ -544,7 +544,7 @@
//****
// Sniper
380,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, SN_SIGHT,Falcon Eyes
381,5,8,1,0,0x40,0,5,1,yes,0,0,0,misc,0,0x80, SN_FALCONASSAULT,Falcon Assault
381,5,8,1,-3,0x40,0,5,1,yes,0,0,0,misc,0,0x80, SN_FALCONASSAULT,Falcon Assault
382,9,8,1,-1,0,2,5,1,yes,0,0,13,weapon,0,0x0, SN_SHARPSHOOTING,Focused Arrow Strike
383,0,6,4,0,0x3,-1,10,1,yes,0,0,0,weapon,0,0x0, SN_WINDWALK,Wind Walker
@ -1021,7 +1021,7 @@
2264,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_F_SIDESLIDE,Front-Side Slide
2265,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_B_SIDESLIDE,Back-Side Slide
2266,0,0,0,0,0,0,4,0,no,0,0,0,none,0,0x0, NC_MAINFRAME,Mainframe Restructure
2267,0,6,4,-1,0xCA,2:3:4,3,1,no,0,0,0,misc,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2267,0,6,4,0,0xCA,2:3:4,3,1,no,0,0,0,weapon,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2268,0,6,4,0,0x1,0,4,1,yes,0,0,0,none,0,0x0, NC_SHAPESHIFT,Shape Shift
2269,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, NC_EMERGENCYCOOL,Emergency Cool
2270,0,6,4,0,0x3,7,1,1,yes,0,0,0,none,0,0x0, NC_INFRAREDSCAN,Infrared Scan

View File

@ -2711,9 +2711,7 @@ struct Damage battle_calc_skill_base_damage(struct Damage wd, struct block_list
if (sd) {
short index = sd->equip_index[EQI_HAND_L];
if (index >= 0 &&
sd->inventory_data[index] &&
sd->inventory_data[index]->type == IT_ARMOR)
if (index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_ARMOR)
ATK_ADD(wd.damage, wd.damage2, sd->inventory_data[index]->weight/10);
} else
ATK_ADD(wd.damage, wd.damage2, sstatus->rhw.atk2); //Else use Atk2
@ -2722,6 +2720,44 @@ struct Damage battle_calc_skill_base_damage(struct Damage wd, struct block_list
wd.weaponAtk2 = (int)wd.damage2;
#endif
break;
case RK_DRAGONBREATH:
case RK_DRAGONBREATH_WATER:
{
int damagevalue = 0;
wd.damage = wd.damage2 = 0;
#ifdef RENEWAL
wd.weaponAtk = wd.weaponAtk2 = 0;
#endif
damagevalue = ((sstatus->hp / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
if(status_get_lv(src) > 100)
damagevalue = damagevalue * status_get_lv(src) / 150;
if(sd)
damagevalue = damagevalue * (100 + 5 * (pc_checkskill(sd,RK_DRAGONTRAINING) - 1)) / 100;
ATK_ADD(wd.damage, wd.damage2, damagevalue);
#ifdef RENEWAL
ATK_ADD(wd.weaponAtk, wd.weaponAtk2, damagevalue);
#endif
wd.flag |= BF_LONG;
}
break;
case NC_SELFDESTRUCTION: {
int damagevalue = 0;
wd.damage = wd.damage2 = 0;
#ifdef RENEWAL
wd.weaponAtk = wd.weaponAtk2 = 0;
#endif
damagevalue = (skill_lv + 1) * ((sd ? pc_checkskill(sd,NC_MAINFRAME) : 0) + 8) * (status_get_sp(src) + sstatus->vit);
if(status_get_lv(src) > 100)
damagevalue = damagevalue * status_get_lv(src) / 100;
damagevalue = damagevalue + sstatus->hp;
ATK_ADD(wd.damage, wd.damage2, damagevalue);
#ifdef RENEWAL
ATK_ADD(wd.weaponAtk, wd.weaponAtk2, damagevalue);
#endif
}
break;
case KO_HAPPOKUNAI: {
int damagevalue = 0;
@ -2745,9 +2781,8 @@ struct Damage battle_calc_skill_base_damage(struct Damage wd, struct block_list
}
break;
case HFLI_SBR44: //[orn]
if(src->type == BL_HOM) {
if(src->type == BL_HOM)
wd.damage = ((TBL_HOM*)src)->homunculus.intimacy ;
}
break;
default:
@ -2802,6 +2837,7 @@ struct Damage battle_calc_skill_base_damage(struct Damage wd, struct block_list
//Add any bonuses that modify the base atk (pre-skills)
if(sd) {
int skill;
if (sd->bonus.atk_rate) {
ATK_ADDRATE(wd.damage, wd.damage2, sd->bonus.atk_rate);
RE_ALLATK_ADDRATE(wd, sd->bonus.atk_rate);
@ -5928,8 +5964,15 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
s_ele = skill_get_ele(skill_id, skill_lv);
if (s_ele < 0 && s_ele != -3) //Attack that takes weapon's element for misc attacks? Make it neutral [Skotlex]
s_ele = ELE_NEUTRAL;
else if (s_ele == -3) //Use random element
else if (s_ele == -3) { //Use random element
if (skill_id == SN_FALCONASSAULT) {
if (sstatus->rhw.ele && !status_get_attack_sc_element(src, status_get_sc(src)))
s_ele = sstatus->rhw.ele;
else
s_ele = status_get_attack_sc_element(src, status_get_sc(src));
} else
s_ele = rnd()%ELE_ALL;
}
//Skill Range Criteria
md.flag |= battle_range_type(src, target, skill_id, skill_lv);
@ -6118,8 +6161,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
case RA_ICEBOUNDTRAP:
md.damage = skill_lv * status_get_dex(src) + status_get_int(src) * 5 ;
RE_LVL_TMDMOD();
if(sd)
{
if(sd) {
int researchskill_lv = pc_checkskill(sd,RA_RESEARCHTRAP);
if(researchskill_lv)
md.damage = (int64)md.damage * 20 * researchskill_lv / (skill_id == RA_CLUSTERBOMB?50:100);
@ -6127,15 +6169,6 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
md.damage = 0;
} else
md.damage = (int64)md.damage * 200 / (skill_id == RA_CLUSTERBOMB?50:100);
break;
case NC_SELFDESTRUCTION:
{
short totaldef = status_get_def2(target) + (short)status_get_def(target);
md.damage = ( ((sd) ? pc_checkskill(sd,NC_MAINFRAME) : skill_get_max(NC_MAINFRAME)) + 8 ) * ( skill_lv + 1 ) * ( status_get_sp(src) + status_get_vit(src) );
RE_LVL_MDMOD(100);
md.damage += status_get_hp(src) - totaldef;
}
break;
case GN_THORNS_TRAP:
md.damage = 100 + 200 * skill_lv + status_get_int(src);

View File

@ -54,6 +54,8 @@ void map_msg_reload(void);
/** Added definitions for WoESE objects and other [L0ne_W0lf], [aleos] */
enum MOBID {
MOBID_PORING = 1002,
MOBID_RED_PLANT = 1078,
MOBID_BLACK_MUSHROOM = 1084,
MOBID_GOBLIN_1 = 1122,
MOBID_GOBLIN_2,
MOBID_GOBLIN_3,
@ -100,6 +102,7 @@ enum MOBID {
MOBID_MAGICDECOY_WATER,
MOBID_MAGICDECOY_EARTH,
MOBID_MAGICDECOY_WIND,
MOBID_ZANZOU = 2308,
MOBID_S_HORNET = 2158,
MOBID_S_GIANT_HORNET,
MOBID_S_LUCIOLA_VESPA,

View File

@ -8959,9 +8959,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
if( sd ) {
if( pc_ismadogear(sd) )
pc_setmadogear(sd, 0);
skill_area_temp[1] = 0;
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
skill_castend_damage_id(src, src, skill_id, skill_lv, tick, flag);
map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
status_set_sp(src, 0, 0);
skill_clear_unitgroup(src);
}
break;
@ -9846,7 +9848,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
if(sd){
struct mob_data *md;
md = mob_once_spawn_sub(src, src->m, src->x, src->y, status_get_name(src), 2308, "", SZ_SMALL, AI_NONE);
md = mob_once_spawn_sub(src, src->m, src->x, src->y, status_get_name(src), MOBID_ZANZOU, "", SZ_SMALL, AI_NONE);
if( md )
{
md->master_id = src->id;
@ -9880,7 +9882,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
break;
case KO_GENWAKU:
if ( !map_flag_gvg(src->m) && ( dstsd || dstmd ) && battle_check_target(src,bl,BCT_ENEMY) > 0 ) {
if ( !map_flag_gvg2(src->m) && ( dstsd || dstmd ) && !(tstatus->mode&MD_PLANT) && battle_check_target(src,bl,BCT_ENEMY) > 0 ) {
int x = src->x, y = src->y;
if( sd && rnd()%100 > ((45+5*skill_lv) - status_get_int(bl)/10) ){//[(Base chance of success) - (Intelligence Objectives / 10)]%.
@ -9893,8 +9895,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
clif_slide(src, bl->x, bl->y);
clif_fixpos(src);
sc_start(src,src,SC_CONFUSION,25,skill_lv,skill_get_time(skill_id,skill_lv));
if (unit_movepos(bl,x,y,0,0))
{
if (unit_movepos(bl,x,y,0,0)) {
clif_skill_damage(bl,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, -1, 6);
if( bl->type == BL_PC && pc_issit((TBL_PC*)bl))
clif_sitting(bl); //Avoid sitting sync problem
@ -11077,7 +11078,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
if (rnd()%100 < 50) {
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
} else {
TBL_MOB* md = mob_once_spawn_sub(src, src->m, x, y, "--ja--",(skill_lv < 2 ? 1084+rnd()%2 : 1078+rnd()%6),"", SZ_SMALL, AI_NONE);
TBL_MOB* md = mob_once_spawn_sub(src, src->m, x, y, "--ja--",(skill_lv < 2 ? MOBID_BLACK_MUSHROOM + rnd()%2 : MOBID_RED_PLANT + rnd()%6),"", SZ_SMALL, AI_NONE);
int i;
if (!md) break;
if ((i = skill_get_time(skill_id, skill_lv)) > 0)
@ -11194,7 +11195,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
case 2: sx = x - i; break;
case 6: sx = x + i; break;
}
skill_addtimerskill(src,gettick() + (150 * i),0,sx,sy,skill_id,skill_lv,dir,flag&2);
skill_addtimerskill(src,gettick() + (140 * i),0,sx,sy,skill_id,skill_lv,dir,flag&2);
}
}
break;
@ -11224,10 +11225,9 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
case NC_SILVERSNIPER:
{
int class_ = MOBID_SILVERSNIPER;
struct mob_data *md;
md = mob_once_spawn_sub(src, src->m, x, y, status_get_name(src), class_, "", SZ_SMALL, AI_NONE);
md = mob_once_spawn_sub(src, src->m, x, y, status_get_name(src), MOBID_SILVERSNIPER, "", SZ_SMALL, AI_NONE);
if( md ) {
md->master_id = src->id;
md->special_state.ai = AI_FAW;
@ -12909,6 +12909,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
case UNT_ELECTRICWALK:
case UNT_PSYCHIC_WAVE:
case UNT_MAGMA_ERUPTION:
case UNT_MAKIBISHI:
skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
break;
@ -13162,12 +13163,6 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
sc_start2(ss, bl,type,100,sg->val1,sg->val2,skill_get_time2(sg->skill_id, sg->skill_lv));
break;
case UNT_MAKIBISHI:
skill_attack(BF_MISC, ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0);
sg->limit = DIFF_TICK(tick, sg->tick);
sg->unit_id = UNT_USED_TRAPS;
break;
case UNT_LAVA_SLIDE:
skill_attack(BF_WEAPON, ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0);
if(++sg->val1 > 4) //after 5 stop hit and destroy me
@ -14655,7 +14650,7 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
case KO_ZANZOU: {
int c = 0;
i = map_foreachinmap(skill_check_condition_mob_master_sub, sd->bl.m, BL_MOB, sd->bl.id, 2308, skill_id, &c);
i = map_foreachinmap(skill_check_condition_mob_master_sub, sd->bl.m, BL_MOB, sd->bl.id, MOBID_ZANZOU, skill_id, &c);
if( c >= skill_get_maxcount(skill_id,skill_lv) || c != i) {
clif_skill_fail(sd , skill_id, USESKILL_FAIL_LEVEL, 0);
return false;