|
@@ -12130,43 +12130,45 @@ int32 status_change_start(struct block_list* src, struct block_list* bl,enum sc_
|
|
|
val2 = 15 + 5 * val1; // AGI
|
|
|
val3 = 25; // Move speed increase
|
|
|
if (sd && (sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER)
|
|
|
- val4 = 10; // Ranged ATK increase
|
|
|
+ val4 = 10; // Ranged ATK increase if the target is a Doram
|
|
|
break;
|
|
|
case SC_SHRIMP:
|
|
|
val2 = 10; // BATK%, MATK%
|
|
|
break;
|
|
|
case SC_FRESHSHRIMP: {
|
|
|
int32 min = 0, max = 0;
|
|
|
+ map_session_data* ssd = BL_CAST( BL_PC, src );
|
|
|
|
|
|
#ifdef RENEWAL
|
|
|
- min = status_base_matk_min(src, status, status_get_lv(src));
|
|
|
- max = status_base_matk_max(src, status, status_get_lv(src));
|
|
|
- if (status->rhw.matk > 0) {
|
|
|
+ status_data* sstatus = status_get_status_data(*src);
|
|
|
+ min = status_base_matk_min(src, sstatus, status_get_lv(src));
|
|
|
+ max = status_base_matk_max(src, sstatus, status_get_lv(src));
|
|
|
+ if (sstatus->rhw.matk > 0) {
|
|
|
int32 wMatk, variance;
|
|
|
|
|
|
- wMatk = status->rhw.matk;
|
|
|
- variance = wMatk * status->rhw.wlv / 10;
|
|
|
+ wMatk = sstatus->rhw.matk;
|
|
|
+ variance = wMatk * sstatus->rhw.wlv / 10;
|
|
|
min += wMatk - variance;
|
|
|
max += wMatk + variance;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
- if (sd && sd->right_weapon.overrefine > 0) {
|
|
|
+ if (ssd != nullptr && ssd->right_weapon.overrefine > 0) {
|
|
|
min++;
|
|
|
- max += sd->right_weapon.overrefine - 1;
|
|
|
+ max += ssd->right_weapon.overrefine - 1;
|
|
|
}
|
|
|
|
|
|
val2 += min + 178; // Heal
|
|
|
if (max > min)
|
|
|
val2 += rnd() % (max - min); // Heal
|
|
|
|
|
|
- if (sd) {
|
|
|
- if (pc_checkskill(sd, SU_POWEROFSEA) > 0) {
|
|
|
+ if (ssd != nullptr) {
|
|
|
+ if (pc_checkskill(ssd, SU_POWEROFSEA) > 0) {
|
|
|
val2 += val2 * 10 / 100;
|
|
|
- if (pc_checkskill_summoner(sd, SUMMONER_POWER_SEA) >= 20)
|
|
|
+ if (pc_checkskill_summoner(ssd, SUMMONER_POWER_SEA) >= 20)
|
|
|
val2 += val2 * 20 / 100;
|
|
|
}
|
|
|
- if (pc_checkskill(sd, SU_SPIRITOFSEA) > 0)
|
|
|
+ if (pc_checkskill(ssd, SU_SPIRITOFSEA) > 0)
|
|
|
val2 *= 2; // Doubles HP
|
|
|
}
|
|
|
tick_time = 10000 - ((val1 - 1) * 1000);
|
|
@@ -14485,7 +14487,7 @@ TIMER_FUNC(status_change_timer){
|
|
|
break;
|
|
|
case SC_FRESHSHRIMP:
|
|
|
if (--(sce->val4) >= 0) {
|
|
|
- status_heal(bl, sce->val2, 0, 0);
|
|
|
+ status_heal(bl, sce->val2, 0, 2);
|
|
|
sc_timer_next((10000 - ((sce->val1 - 1) * 1000)) + tick);
|
|
|
return 0;
|
|
|
}
|