|
@@ -1850,13 +1850,12 @@ static int battle_blewcount_bonus(struct map_session_data *sd, uint16 skill_id)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#ifdef ADJUST_SKILL_DAMAGE
|
|
/**
|
|
/**
|
|
* Damage calculation for adjusting skill damage
|
|
* Damage calculation for adjusting skill damage
|
|
* @param caster Applied caster type for damage skill
|
|
* @param caster Applied caster type for damage skill
|
|
* @param type BL_Type of attacker
|
|
* @param type BL_Type of attacker
|
|
- * @author [Lilith] for the first release of this, [Cydh]
|
|
|
|
*/
|
|
*/
|
|
-#ifdef ADJUST_SKILL_DAMAGE
|
|
|
|
static bool battle_skill_damage_iscaster(uint8 caster, enum bl_type src_type) {
|
|
static bool battle_skill_damage_iscaster(uint8 caster, enum bl_type src_type) {
|
|
if (caster == 0)
|
|
if (caster == 0)
|
|
return false;
|
|
return false;
|
|
@@ -1882,6 +1881,7 @@ static bool battle_skill_damage_iscaster(uint8 caster, enum bl_type src_type) {
|
|
static int battle_skill_damage_skill(struct block_list *src, struct block_list *target, uint16 skill_id) {
|
|
static int battle_skill_damage_skill(struct block_list *src, struct block_list *target, uint16 skill_id) {
|
|
uint16 idx = skill_get_index(skill_id), m = src->m;
|
|
uint16 idx = skill_get_index(skill_id), m = src->m;
|
|
struct s_skill_damage *damage = NULL;
|
|
struct s_skill_damage *damage = NULL;
|
|
|
|
+ struct map_data *mapd = &map[m];
|
|
|
|
|
|
if (!idx || !skill_db[idx].damage.map)
|
|
if (!idx || !skill_db[idx].damage.map)
|
|
return 0;
|
|
return 0;
|
|
@@ -1892,12 +1892,12 @@ static int battle_skill_damage_skill(struct block_list *src, struct block_list *
|
|
if (!battle_skill_damage_iscaster(damage->caster, src->type))
|
|
if (!battle_skill_damage_iscaster(damage->caster, src->type))
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- if ((damage->map&1 && (!map[m].flag.pvp && !map_flag_gvg(m) && !map[m].flag.battleground && !map[m].flag.skill_damage && !map[m].flag.restricted)) ||
|
|
|
|
- (damage->map&2 && map[m].flag.pvp) ||
|
|
|
|
|
|
+ if ((damage->map&1 && (!mapd->flag.pvp && !map_flag_gvg(m) && !mapd->flag.battleground && !mapd->flag.skill_damage && !mapd->flag.restricted)) ||
|
|
|
|
+ (damage->map&2 && mapd->flag.pvp) ||
|
|
(damage->map&4 && map_flag_gvg(m)) ||
|
|
(damage->map&4 && map_flag_gvg(m)) ||
|
|
- (damage->map&8 && map[m].flag.battleground) ||
|
|
|
|
- (damage->map&16 && map[m].flag.skill_damage) ||
|
|
|
|
- (map[m].flag.restricted && skill_db[idx].damage.map&(8*map[m].zone)))
|
|
|
|
|
|
+ (damage->map&8 && mapd->flag.battleground) ||
|
|
|
|
+ (damage->map&16 && mapd->flag.skill_damage) ||
|
|
|
|
+ (mapd->flag.restricted && damage->map&(8*mapd->zone)))
|
|
{
|
|
{
|
|
switch (target->type) {
|
|
switch (target->type) {
|
|
case BL_PC:
|
|
case BL_PC:
|
|
@@ -1924,46 +1924,52 @@ static int battle_skill_damage_skill(struct block_list *src, struct block_list *
|
|
*/
|
|
*/
|
|
static int battle_skill_damage_map(struct block_list *src, struct block_list *target, uint16 skill_id) {
|
|
static int battle_skill_damage_map(struct block_list *src, struct block_list *target, uint16 skill_id) {
|
|
int rate = 0;
|
|
int rate = 0;
|
|
- uint16 m = src->m;
|
|
|
|
- uint8 i;
|
|
|
|
|
|
+ uint8 i = 0;
|
|
|
|
+ struct map_data *mapd = NULL;
|
|
|
|
+
|
|
|
|
+ mapd = &map[src->m];
|
|
|
|
|
|
- if (!map[m].flag.skill_damage)
|
|
|
|
|
|
+ if (!mapd || !mapd->flag.skill_damage)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
// Damage rate for all skills at this map
|
|
// Damage rate for all skills at this map
|
|
- if (battle_skill_damage_iscaster(map[m].adjust.damage.caster, src->type)) {
|
|
|
|
|
|
+ if (battle_skill_damage_iscaster(mapd->adjust.damage.caster, src->type)) {
|
|
switch (target->type) {
|
|
switch (target->type) {
|
|
case BL_PC:
|
|
case BL_PC:
|
|
- rate = map[m].adjust.damage.pc;
|
|
|
|
|
|
+ rate = mapd->adjust.damage.pc;
|
|
break;
|
|
break;
|
|
case BL_MOB:
|
|
case BL_MOB:
|
|
if (is_boss(target))
|
|
if (is_boss(target))
|
|
- rate = map[m].adjust.damage.boss;
|
|
|
|
|
|
+ rate = mapd->adjust.damage.boss;
|
|
else
|
|
else
|
|
- rate = map[m].adjust.damage.mob;
|
|
|
|
|
|
+ rate = mapd->adjust.damage.mob;
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
- rate = map[m].adjust.damage.other;
|
|
|
|
|
|
+ rate = mapd->adjust.damage.other;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (!mapd->skill_damage.count)
|
|
|
|
+ return rate;
|
|
|
|
+
|
|
// Damage rate for specified skill at this map
|
|
// Damage rate for specified skill at this map
|
|
- ARR_FIND(0, ARRAYLENGTH(map[m].skill_damage), i, map[m].skill_damage[i].skill_id == skill_id);
|
|
|
|
- if (i < ARRAYLENGTH(map[m].skill_damage)) {
|
|
|
|
- if (battle_skill_damage_iscaster(map[m].skill_damage[i].caster, src->type)) {
|
|
|
|
|
|
+ for (i = 0; i < mapd->skill_damage.count; i++) {
|
|
|
|
+ if (mapd->skill_damage.entries[i]->skill_id == skill_id &&
|
|
|
|
+ battle_skill_damage_iscaster(mapd->skill_damage.entries[i]->caster, src->type))
|
|
|
|
+ {
|
|
switch (target->type) {
|
|
switch (target->type) {
|
|
case BL_PC:
|
|
case BL_PC:
|
|
- rate += map[m].skill_damage[i].pc;
|
|
|
|
|
|
+ rate += mapd->skill_damage.entries[i]->pc;
|
|
break;
|
|
break;
|
|
case BL_MOB:
|
|
case BL_MOB:
|
|
if (is_boss(target))
|
|
if (is_boss(target))
|
|
- rate += map[m].skill_damage[i].boss;
|
|
|
|
|
|
+ rate += mapd->skill_damage.entries[i]->boss;
|
|
else
|
|
else
|
|
- rate += map[m].skill_damage[i].mob;
|
|
|
|
|
|
+ rate += mapd->skill_damage.entries[i]->mob;
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
- rate += map[m].skill_damage[i].other;
|
|
|
|
|
|
+ rate += mapd->skill_damage.entries[i]->other;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1979,6 +1985,7 @@ static int battle_skill_damage_map(struct block_list *src, struct block_list *ta
|
|
* @return Total damage rate
|
|
* @return Total damage rate
|
|
*/
|
|
*/
|
|
static int battle_skill_damage(struct block_list *src, struct block_list *target, uint16 skill_id) {
|
|
static int battle_skill_damage(struct block_list *src, struct block_list *target, uint16 skill_id) {
|
|
|
|
+ nullpo_ret(src);
|
|
if (!target)
|
|
if (!target)
|
|
return 0;
|
|
return 0;
|
|
return battle_skill_damage_skill(src, target, skill_id) + battle_skill_damage_map(src, target, skill_id);
|
|
return battle_skill_damage_skill(src, target, skill_id) + battle_skill_damage_map(src, target, skill_id);
|
|
@@ -4687,7 +4694,7 @@ struct Damage battle_calc_weapon_final_atk_modifiers(struct Damage wd, struct bl
|
|
struct status_data *sstatus = status_get_status_data(src);
|
|
struct status_data *sstatus = status_get_status_data(src);
|
|
struct status_data *tstatus = status_get_status_data(target);
|
|
struct status_data *tstatus = status_get_status_data(target);
|
|
#ifdef ADJUST_SKILL_DAMAGE
|
|
#ifdef ADJUST_SKILL_DAMAGE
|
|
- int skill_damage;
|
|
|
|
|
|
+ int skill_damage = 0;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
//Reject Sword bugreport:4493 by Daegaladh
|
|
//Reject Sword bugreport:4493 by Daegaladh
|
|
@@ -5260,7 +5267,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
|
{
|
|
{
|
|
int i, nk;
|
|
int i, nk;
|
|
#ifdef ADJUST_SKILL_DAMAGE
|
|
#ifdef ADJUST_SKILL_DAMAGE
|
|
- int skill_damage;
|
|
|
|
|
|
+ int skill_damage = 0;
|
|
#endif
|
|
#endif
|
|
short s_ele = 0;
|
|
short s_ele = 0;
|
|
|
|
|
|
@@ -6018,7 +6025,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
|
struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *target,uint16 skill_id,uint16 skill_lv,int mflag)
|
|
struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *target,uint16 skill_id,uint16 skill_lv,int mflag)
|
|
{
|
|
{
|
|
#ifdef ADJUST_SKILL_DAMAGE
|
|
#ifdef ADJUST_SKILL_DAMAGE
|
|
- int skill_damage;
|
|
|
|
|
|
+ int skill_damage = 0;
|
|
#endif
|
|
#endif
|
|
short i, nk;
|
|
short i, nk;
|
|
short s_ele;
|
|
short s_ele;
|