From a830f934d0e60a63f6491a0ccc6e98341d12af36 Mon Sep 17 00:00:00 2001 From: Michieru Date: Sun, 23 Mar 2014 00:33:29 +0100 Subject: Fix Bug 8106 http://hercules.ws/board/tracker/issue-8106-crescent-elbow-knockback-range/ Increase reflect damage make by crescent elbow Fix Bug 8099 http://hercules.ws/board/tracker/issue-8099-renewal-acid-bomb-damage/ Cart Revolution will now always knock targets to the West - rAthena:1f26499994af9b64aa96d5ed46f6e7cdefdb025b Fix a bug with Backslide that let you continue to move even if you hit a wall on some case. Thanks to Ind --- db/re/skill_db.txt | 2 +- src/map/battle.c | 6 +++--- src/map/path.c | 34 +++++++++++----------------------- src/map/skill.c | 3 +++ src/map/status.c | 16 ++++++++++++---- 5 files changed, 30 insertions(+), 31 deletions(-) diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 29ba70d69..152912337 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -915,7 +915,7 @@ 2339,0,0,0,0,0,0,5,1,no,0,0,0,none,0, SR_GENTLETOUCH,Gentle Touch 2340,0,6,4,0,0x3,2,1,1,no,0,0,0,none,0, SR_ASSIMILATEPOWER,Assimilate Power 2341,3,6,16,0,0x1,0,1,1,yes,0,0x200,0,none,0, SR_POWERVELOCITY,Power Velocity -2342,1,6,1,-1,0x20,0,5,1,no,0,0,0,weapon,3, SR_CRESCENTELBOW_AUTOSPELL,Crescent Elbow Autospell //CHECK Does this ignore defense? +2342,1,6,1,-1,0x20,0,5,1,no,0,0,0,weapon,7, SR_CRESCENTELBOW_AUTOSPELL,Crescent Elbow Autospell //CHECK Does this ignore defense? 2343,1:2:3:3:4:4:5:5:6:7,8,1,0,0,0,10,-7,yes,0,0,0,weapon,0, SR_GATEOFHELL,Gate of Hell //CHECK Need to fix to be enemy targeted and also combo after Fallen Empire 2344,2,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, SR_GENTLETOUCH_QUIET,Gentle Touch - Quiet 2345,2,6,16,0,0x1,0,5,1,no,0,0,0,magic,0, SR_GENTLETOUCH_CURE,Gentle Touch - Cure //CHECK Its a healing skill. Guessing it has to be magic type? Healing isnt working. diff --git a/src/map/battle.c b/src/map/battle.c index 6836aa016..2217ccecc 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3726,8 +3726,6 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * md.damage = 7 * targetVit * skill_lv * (atk + matk) / 100; /* // Pending [malufett] - if( unknown condition ) - md.damage >>= 1; if( unknown condition ){ md.damage = 7 * md.damage % 20; md.damage = 7 * md.damage / 20; @@ -3739,6 +3737,8 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * vitfactor = (vitfactor * (matk + atk) / 10) / status_get_vit(target); ftemp = max(0, vitfactor) + (targetVit * (matk + atk)) / 10; md.damage = (int64)(ftemp * 70 * skill_lv / 100); + if (target->type == BL_PC) + md.damage >>= 1; } md.damage -= totaldef; } @@ -5325,7 +5325,7 @@ void battle_reflect_damage(struct block_list *target, struct block_list *src, st //ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}] int ratio = (status_get_hp(src) / 100) * sc->data[SC_CRESCENTELBOW]->val1 * status->get_lv(target) / 125; if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK - rdamage = rdamage * ratio / 100 + (damage) * (10 + sc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10; + rdamage = ratio + (damage)* (10 + sc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10; skill->blown(target, src, skill->get_blewcount(SR_CRESCENTELBOW_AUTOSPELL, sc->data[SC_CRESCENTELBOW]->val1), unit->getdir(src), 0); clif->skill_damage(target, src, tick, status_get_amotion(src), 0, rdamage, 1, SR_CRESCENTELBOW_AUTOSPELL, sc->data[SC_CRESCENTELBOW]->val1, 6); // This is how official does diff --git a/src/map/path.c b/src/map/path.c index 21d14c815..3b33fce65 100644 --- a/src/map/path.c +++ b/src/map/path.c @@ -82,29 +82,17 @@ int path_blownpos(int16 m,int16 x0,int16 y0,int16 dx,int16 dy,int count) dy=(dy>0)?1:((dy<0)?-1:0); } - while( count > 0 && (dx != 0 || dy != 0) ) { - if( !md->getcellp(md,x0+dx,y0+dy,CELL_CHKPASS) ) {// attempt partial movement - int fx = ( dx != 0 && md->getcellp(md,x0+dx,y0,CELL_CHKPASS) ); - int fy = ( dy != 0 && md->getcellp(md,x0,y0+dy,CELL_CHKPASS) ); - if( fx && fy ) - { - if(rnd()&1) - dx=0; - else - dy=0; - } - if( !fx ) - dx=0; - if( !fy ) - dy=0; - } - - x0 += dx; - y0 += dy; - count--; - } - - return (x0<<16)|y0; //TODO: use 'struct point' here instead? + while( count > 0 && (dx != 0 || dy != 0) ) { + if( !md->getcellp(md,x0+dx,y0+dy,CELL_CHKPASS) ) { + break; + } + + x0 += dx; + y0 += dy; + count--; + } + + return (x0<<16)|y0; //TODO: use 'struct point' here instead? } /*========================================== diff --git a/src/map/skill.c b/src/map/skill.c index 22d97fff1..8e2e44883 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2629,6 +2629,9 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr case WL_CRIMSONROCK: dir = map->calc_dir(bl,skill->area_temp[4],skill->area_temp[5]); break; + case MC_CARTREVOLUTION: + dir = 6; // Official servers push target to the West + break; } diff --git a/src/map/status.c b/src/map/status.c index ee72f0319..56b0531cb 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -9206,8 +9206,12 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t case SC_ITEMSCRIPT: if( sd ) { switch( val1 ) { - //case ITEMID_PHREEONI_CARD: - //case ITEMID_GHOSTRING_CARD: + case ITEMID_PHREEONI_CARD: + clif->status_change(bl, SI_FOOD_BASICHIT, 1, tick, 0, 0, 0); + break; + case ITEMID_GHOSTRING_CARD: + clif->status_change(bl,SI_ARMOR_PROPERTY,1,tick,0,0,0); + break; case ITEMID_TAO_GUNKA_CARD: clif->status_change(bl,SI_MVPCARD_TAOGUNKA,1,tick,0,0,0); break; @@ -10084,8 +10088,12 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const case SC_ITEMSCRIPT: if( sd ) { switch( sce->val1 ) { - //case ITEMID_PHREEONI_CARD: - //case ITEMID_GHOSTRING_CARD: + case ITEMID_PHREEONI_CARD: + clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_FOOD_BASICHIT); + break; + case ITEMID_GHOSTRING_CARD: + clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_ARMOR_PROPERTY); + break; case ITEMID_TAO_GUNKA_CARD: clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_MVPCARD_TAOGUNKA); break; -- cgit v1.2.3-60-g2f50