From 7158896a63c7150b8a1cb181d398929c9c481ea0 Mon Sep 17 00:00:00 2001 From: rud0lp20 Date: Thu, 28 Jun 2012 14:41:25 +0000 Subject: Fixed bugreport:6127 remove the double duration bonus from GC_RESEARCHEWPOISON Fixed bugreport:6109 GN_CARTBOOST should now give atk bonus and fixed some genetic skills damage ratio and behavior Fixed bugreport:6121 Rolling cutter's counter should now only be removed by walking and Cross Ripper Slasher Fixed bugreport:6100 Cart should now can't be removed when character dies git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16353 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/battle.c | 17 +++++++++-------- src/map/map.c | 1 - src/map/skill.c | 7 ++----- src/map/status.c | 1 + src/map/unit.c | 1 + 5 files changed, 13 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/map/battle.c b/src/map/battle.c index d7c5147e8..e1901503b 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2362,16 +2362,15 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo skillratio += 400; break; case GN_CART_TORNADO: - if( sd ) - skillratio += 50 * skill_lv + pc_checkskill(sd, GN_REMODELING_CART) * 100 - 100; - RE_LVL_DMOD(100); - if( sc && sc->data[SC_GN_CARTBOOST] ) - skillratio += 10 * sc->data[SC_GN_CARTBOOST]->val1; + // ATK [( Skill Level x 50 ) + ( Cart Weight / ( 150 - Caster’s Base STR ))] + ( Cart Remodeling Skill Level x 50 )] % + skillratio = 50 * skill_lv; + if( sd && sd->cart_weight) + skillratio += sd->cart_weight/10 / (150-sstatus->str) + pc_checkskill(sd, GN_REMODELING_CART) * 50; break; case GN_CARTCANNON: - if( sd ) skillratio += 250 + 50 * skill_lv + pc_checkskill(sd, GN_REMODELING_CART) * (sstatus->int_ / 2); - if( sc && sc->data[SC_GN_CARTBOOST] ) - skillratio += 10 * sc->data[SC_GN_CARTBOOST]->val1; + // ATK [{( Cart Remodeling Skill Level x 50 ) x ( INT / 40 )} + ( Cart Cannon Skill Level x 60 )] % + skillratio = 60 * skill_lv; + if( sd ) skillratio += pc_checkskill(sd, GN_REMODELING_CART) * 50 * (sstatus->int_ / 40); break; case GN_SPORE_EXPLOSION: skillratio += 200 + 100 * skill_lv; @@ -2695,6 +2694,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo #endif ATK_ADD(20*lv); } + if(sc->data[SC_GN_CARTBOOST]) + ATK_ADD(10*sc->data[SC_GN_CARTBOOST]->val1); } //Refine bonus diff --git a/src/map/map.c b/src/map/map.c index 1c831c5f1..073901204 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -403,7 +403,6 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick) if (sc->data[SC_PROPERTYWALK] && sc->data[SC_PROPERTYWALK]->val3 >= skill_get_maxcount(sc->data[SC_PROPERTYWALK]->val1,sc->data[SC_PROPERTYWALK]->val2) ) status_change_end(bl,SC_PROPERTYWALK,INVALID_TIMER); - status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER); //If you move, you lose your counters. } else if (bl->type == BL_NPC) npc_unsetcells((TBL_NPC*)bl); diff --git a/src/map/skill.c b/src/map/skill.c index f70290ef3..6f459eed1 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3373,6 +3373,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int case CH_TIGERFIST: case PA_SHIELDCHAIN: // Shield Chain case PA_SACRIFICE: + case ASC_EDP: case WS_CARTTERMINATION: // Cart Termination case AS_VENOMKNIFE: case HT_PHANTASMIC: @@ -5070,10 +5071,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in } break; - case ASC_EDP: - clif_skill_nodamage(src,bl,skillid,skilllv, - sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv) + ( sd ? 3000 * pc_checkskill(sd,GC_RESEARCHNEWPOISON) : 0 ))); - break; case AL_INCAGI: case AL_BLESSING: case MER_INCAGI: @@ -11208,7 +11205,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns const struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL; if( td ) sec = DIFF_TICK(td->tick, tick); - map_moveblock(bl, src->bl.x, src->bl.y, tick); + ///map_moveblock(bl, src->bl.x, src->bl.y, tick); // in official server it doesn't behave like this. [malufett] clif_fixpos(bl); sg->val2 = bl->id; } else diff --git a/src/map/status.c b/src/map/status.c index 49da4ae9f..f46b12f7f 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -8411,6 +8411,7 @@ int status_change_clear(struct block_list* bl, int type) case SC_MATKPOTION: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION: + case SC_PUSH_CART: continue; } diff --git a/src/map/unit.c b/src/map/unit.c index 2fc70d31e..b45312949 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -163,6 +163,7 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data y += dy; map_moveblock(bl, x, y, tick); ud->walk_count++; //walked cell counter, to be used for walk-triggered skills. [Skotlex] + status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER); //If you move, you lose your counters. [malufett] if (bl->x != x || bl->y != y || ud->walktimer != INVALID_TIMER) return 0; //map_moveblock has altered the object beyond what we expected (moved/warped it) -- cgit v1.2.3-70-g09d2