|
@@ -5161,7 +5161,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
case KN_CHARGEATK:
|
|
case KN_CHARGEATK:
|
|
{
|
|
{
|
|
bool path = path_search_long(NULL, src->m, src->x, src->y, bl->x, bl->y,CELL_CHKWALL);
|
|
bool path = path_search_long(NULL, src->m, src->x, src->y, bl->x, bl->y,CELL_CHKWALL);
|
|
|
|
+#ifdef RENEWAL
|
|
|
|
+ int dist = skill_get_blewcount(skill_id, skill_lv);
|
|
|
|
+#else
|
|
unsigned int dist = distance_bl(src, bl);
|
|
unsigned int dist = distance_bl(src, bl);
|
|
|
|
+#endif
|
|
uint8 dir = map_calc_dir(bl, src->x, src->y);
|
|
uint8 dir = map_calc_dir(bl, src->x, src->y);
|
|
|
|
|
|
// teleport to target (if not on WoE grounds)
|
|
// teleport to target (if not on WoE grounds)
|
|
@@ -5170,8 +5174,13 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|
|
|
|
|
// cause damage and knockback if the path to target was a straight one
|
|
// cause damage and knockback if the path to target was a straight one
|
|
if (path) {
|
|
if (path) {
|
|
- if(skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, dist))
|
|
|
|
|
|
+ if(skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, dist)) {
|
|
|
|
+#ifdef RENEWAL
|
|
|
|
+ if (map_getmapdata(src->m)->flag[MF_PVP])
|
|
|
|
+ dist += 2; // Knockback is 4 on PvP maps
|
|
|
|
+#endif
|
|
skill_blown(src, bl, dist, dir, BLOWN_NONE);
|
|
skill_blown(src, bl, dist, dir, BLOWN_NONE);
|
|
|
|
+ }
|
|
//HACK: since knockback officially defaults to the left, the client also turns to the left... therefore,
|
|
//HACK: since knockback officially defaults to the left, the client also turns to the left... therefore,
|
|
// make the caster look in the direction of the target
|
|
// make the caster look in the direction of the target
|
|
unit_setdir(src, (dir+4)%8);
|
|
unit_setdir(src, (dir+4)%8);
|
|
@@ -7094,13 +7103,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+#ifndef RENEWAL
|
|
skill_area_temp[0] = battle_config.exp_cost_redemptio_limit - skill_area_temp[0]; // The actual penalty...
|
|
skill_area_temp[0] = battle_config.exp_cost_redemptio_limit - skill_area_temp[0]; // The actual penalty...
|
|
if (skill_area_temp[0] > 0 && !map_getmapflag(src->m, MF_NOEXPPENALTY) && battle_config.exp_cost_redemptio) { //Apply penalty
|
|
if (skill_area_temp[0] > 0 && !map_getmapflag(src->m, MF_NOEXPPENALTY) && battle_config.exp_cost_redemptio) { //Apply penalty
|
|
//If total penalty is 1% => reduced 0.2% penalty per each revived player
|
|
//If total penalty is 1% => reduced 0.2% penalty per each revived player
|
|
pc_lostexp(sd, u64min(sd->status.base_exp, (pc_nextbaseexp(sd) * skill_area_temp[0] * battle_config.exp_cost_redemptio / battle_config.exp_cost_redemptio_limit) / 100), 0);
|
|
pc_lostexp(sd, u64min(sd->status.base_exp, (pc_nextbaseexp(sd) * skill_area_temp[0] * battle_config.exp_cost_redemptio / battle_config.exp_cost_redemptio_limit) / 100), 0);
|
|
}
|
|
}
|
|
- status_set_hp(src, 1, 0);
|
|
|
|
status_set_sp(src, 0, 0);
|
|
status_set_sp(src, 0, 0);
|
|
|
|
+#endif
|
|
|
|
+ status_set_hp(src, 1, 0);
|
|
break;
|
|
break;
|
|
} else if (status_isdead(bl) && flag&1) { //Revive
|
|
} else if (status_isdead(bl) && flag&1) { //Revive
|
|
skill_area_temp[0]++; //Count it in, then fall-through to the Resurrection code.
|
|
skill_area_temp[0]++; //Count it in, then fall-through to the Resurrection code.
|
|
@@ -8609,12 +8620,18 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|
|
|
|
|
case BA_PANGVOICE:
|
|
case BA_PANGVOICE:
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,SC_CONFUSION,50,7,skill_get_time(skill_id,skill_lv)));
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,SC_CONFUSION,50,7,skill_get_time(skill_id,skill_lv)));
|
|
|
|
+#ifdef RENEWAL
|
|
|
|
+ sc_start(src, bl, SC_BLEEDING, 30, skill_lv, skill_get_time2(skill_id, skill_lv)); // TODO: Confirm success rate
|
|
|
|
+#endif
|
|
break;
|
|
break;
|
|
|
|
|
|
case DC_WINKCHARM:
|
|
case DC_WINKCHARM:
|
|
- if( dstsd )
|
|
|
|
|
|
+ if( dstsd ) {
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,SC_CONFUSION,30,7,skill_get_time2(skill_id,skill_lv)));
|
|
clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,SC_CONFUSION,30,7,skill_get_time2(skill_id,skill_lv)));
|
|
- else
|
|
|
|
|
|
+#ifdef RENEWAL
|
|
|
|
+ sc_start(src, bl, SC_HALLUCINATION, 30, skill_lv, skill_get_time(skill_id, skill_lv)); // TODO: Confirm success rate and duration
|
|
|
|
+#endif
|
|
|
|
+ } else
|
|
if( dstmd )
|
|
if( dstmd )
|
|
{
|
|
{
|
|
if( status_get_lv(src) > status_get_lv(bl)
|
|
if( status_get_lv(src) > status_get_lv(bl)
|
|
@@ -16930,6 +16947,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
|
|
+#ifndef RENEWAL
|
|
case PR_REDEMPTIO:
|
|
case PR_REDEMPTIO:
|
|
{
|
|
{
|
|
t_exp exp = pc_nextbaseexp(sd);
|
|
t_exp exp = pc_nextbaseexp(sd);
|
|
@@ -16941,7 +16959,6 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
-#ifndef RENEWAL
|
|
|
|
case HP_BASILICA:
|
|
case HP_BASILICA:
|
|
if( !sc || (sc && !sc->data[SC_BASILICA])) {
|
|
if( !sc || (sc && !sc->data[SC_BASILICA])) {
|
|
if( sd ) {
|
|
if( sd ) {
|
|
@@ -18212,8 +18229,15 @@ struct s_skill_condition skill_get_requirement(struct map_session_data* sd, uint
|
|
// Check for cost reductions due to skills & SCs
|
|
// Check for cost reductions due to skills & SCs
|
|
switch(skill_id) {
|
|
switch(skill_id) {
|
|
case MC_MAMMONITE:
|
|
case MC_MAMMONITE:
|
|
|
|
+#ifdef RENEWAL
|
|
|
|
+ case WS_CARTTERMINATION:
|
|
|
|
+#endif
|
|
if(pc_checkskill(sd,BS_UNFAIRLYTRICK)>0)
|
|
if(pc_checkskill(sd,BS_UNFAIRLYTRICK)>0)
|
|
|
|
+#ifdef RENEWAL
|
|
|
|
+ req.zeny -= req.zeny*20/100;
|
|
|
|
+#else
|
|
req.zeny -= req.zeny*10/100;
|
|
req.zeny -= req.zeny*10/100;
|
|
|
|
+#endif
|
|
break;
|
|
break;
|
|
case AL_HOLYLIGHT:
|
|
case AL_HOLYLIGHT:
|
|
if(sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_PRIEST)
|
|
if(sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_PRIEST)
|