|
@@ -5770,7 +5770,7 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
|
|
if(sc->data[SC_BLESSING]->val2)
|
|
if(sc->data[SC_BLESSING]->val2)
|
|
str += sc->data[SC_BLESSING]->val2;
|
|
str += sc->data[SC_BLESSING]->val2;
|
|
else
|
|
else
|
|
- str >>= 1;
|
|
|
|
|
|
+ str -= str / 2;
|
|
}
|
|
}
|
|
if(sc->data[SC_MARIONETTE])
|
|
if(sc->data[SC_MARIONETTE])
|
|
str -= ((sc->data[SC_MARIONETTE]->val3)>>16)&0xFF;
|
|
str -= ((sc->data[SC_MARIONETTE]->val3)>>16)&0xFF;
|
|
@@ -6000,7 +6000,7 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang
|
|
if (sc->data[SC_BLESSING]->val2)
|
|
if (sc->data[SC_BLESSING]->val2)
|
|
int_ += sc->data[SC_BLESSING]->val2;
|
|
int_ += sc->data[SC_BLESSING]->val2;
|
|
else
|
|
else
|
|
- int_ >>= 1;
|
|
|
|
|
|
+ int_ -= int_ / 2;
|
|
}
|
|
}
|
|
if(sc->data[SC_NEN])
|
|
if(sc->data[SC_NEN])
|
|
int_ += sc->data[SC_NEN]->val1;
|
|
int_ += sc->data[SC_NEN]->val1;
|
|
@@ -6091,7 +6091,7 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang
|
|
if (sc->data[SC_BLESSING]->val2)
|
|
if (sc->data[SC_BLESSING]->val2)
|
|
dex += sc->data[SC_BLESSING]->val2;
|
|
dex += sc->data[SC_BLESSING]->val2;
|
|
else
|
|
else
|
|
- dex >>= 1;
|
|
|
|
|
|
+ dex -= dex / 2;
|
|
}
|
|
}
|
|
if(sc->data[SC_INCREASING])
|
|
if(sc->data[SC_INCREASING])
|
|
dex += 4; // Added based on skill updates [Reddozen]
|
|
dex += 4; // Added based on skill updates [Reddozen]
|
|
@@ -9674,14 +9674,14 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|
// List of hardcoded status cured.
|
|
// List of hardcoded status cured.
|
|
switch (type) {
|
|
switch (type) {
|
|
case SC_BLESSING:
|
|
case SC_BLESSING:
|
|
- // !TODO: Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM
|
|
|
|
- // !but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm]
|
|
|
|
- if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) {
|
|
|
|
- status_change_end(bl, SC_CURSE, INVALID_TIMER);
|
|
|
|
- status_change_end(bl, SC_STONE, INVALID_TIMER);
|
|
|
|
|
|
+ if (bl->type == BL_PC) {
|
|
|
|
+ // Remove Curse first, Stone is only removed if the target is not cursed
|
|
if (sc->data[SC_CURSE]) {
|
|
if (sc->data[SC_CURSE]) {
|
|
- status_change_end(bl, SC_CURSE, INVALID_TIMER);
|
|
|
|
- return 1; // End Curse and do not give stat boost
|
|
|
|
|
|
+ status_change_end(bl, SC_CURSE, INVALID_TIMER);
|
|
|
|
+ return 1; // End Curse and do not give stat boost
|
|
|
|
+ } else if (sc->data[SC_STONE]) {
|
|
|
|
+ status_change_end(bl, SC_STONE, INVALID_TIMER);
|
|
|
|
+ return 1; // End Stone and do not give stat boost
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH)
|
|
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH)
|
|
@@ -10516,7 +10516,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|
val3 = 5*val1; // SP cost
|
|
val3 = 5*val1; // SP cost
|
|
break;
|
|
break;
|
|
case SC_BLESSING:
|
|
case SC_BLESSING:
|
|
- if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC)
|
|
|
|
|
|
+ if (bl->type == BL_PC || (!undead_flag && status->race != RC_DEMON))
|
|
val2 = val1;
|
|
val2 = val1;
|
|
else
|
|
else
|
|
val2 = 0; // 0 -> Half stat.
|
|
val2 = 0; // 0 -> Half stat.
|