summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/map/battle.c17
-rw-r--r--src/map/map.c1
-rw-r--r--src/map/skill.c7
-rw-r--r--src/map/status.c1
-rw-r--r--src/map/unit.c1
5 files changed, 13 insertions, 14 deletions
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)