Decrease Agi, Adoramus (fixes #1067)

* The chance of Decrease Agi and Adoramus is now reduced by a fixed 1% per MDEF
* Decrease Agi can now overwrite itself with a lower level
* The base chance to cause blind when Adoramus activates is now 1000%
* Adoramus now has a blind duration of 7s+1s*level and an Adoramus duration of 10s+5s*level for both players and monsters
* Adoramus and Decrease Agi cancel each other out
* Adoramus no longer reduces speed (only AGI reduction and blind)
* Adoramus no longer cancels ASPD/Speed increasing buffs
* Adoramus can no longer be blocked/canceled by ASPD/Speed increasing buffs
* When Adoramus ends, it will no longer automatically end blind at the same time
This commit is contained in:
Playtester 2016-03-18 23:06:29 +01:00
parent 207c67d72c
commit 1ca9fb58f2
4 changed files with 23 additions and 22 deletions

View File

@ -1146,7 +1146,7 @@
//-- AB_ANCILLA //-- AB_ANCILLA
2039,1000,1000,0,0,0,0 2039,1000,1000,0,0,0,0
//-- AB_ADORAMUS //-- AB_ADORAMUS
2040,2000,500,0,6000:7000:8000:9000:10000:11000:12000:13000:14000:15000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,2000 2040,2000,500,0,8000:9000:10000:11000:12000:13000:14000:15000:16000:17000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,2000
//-- AB_CLEMENTIA //-- AB_CLEMENTIA
2041,3000,0,0,120000:180000:240000,0,0 2041,3000,0,0,120000:180000:240000,0,0
//-- AB_CANTO //-- AB_CANTO

View File

@ -1162,7 +1162,7 @@
//-- AB_ANCILLA //-- AB_ANCILLA
2039,1000,1000,0,0,0,0,-1 2039,1000,1000,0,0,0,0,-1
//-- AB_ADORAMUS //-- AB_ADORAMUS
2040,2000,500,0,6000:7000:8000:9000:10000:11000:12000:13000:14000:15000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,2000,-1 2040,2000,500,0,8000:9000:10000:11000:12000:13000:14000:15000:16000:17000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,2000,-1
//-- AB_CLEMENTIA //-- AB_CLEMENTIA
2041,3000,0,0,120000:180000:240000,0,0,1000 2041,3000,0,0,120000:180000:240000,0,0,1000
//-- AB_CANTO //-- AB_CANTO

View File

@ -1435,8 +1435,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
sc_start(src,bl,SC_FREEZING,15,skill_lv,skill_get_time(skill_id,skill_lv)); sc_start(src,bl,SC_FREEZING,15,skill_lv,skill_get_time(skill_id,skill_lv));
break; break;
case AB_ADORAMUS: case AB_ADORAMUS:
if( tsc && !tsc->data[SC_DECREASEAGI] ) //Prevent duplicate agi-down effect. sc_start(src,bl, SC_ADORAMUS, skill_lv * 4 + (sd ? sd->status.job_level : 50) / 2, skill_lv, skill_get_time2(skill_id, skill_lv));
sc_start(src,bl, SC_ADORAMUS, skill_lv * 4 + (sd ? sd->status.job_level : 50) / 2, skill_lv, skill_get_time(skill_id, skill_lv));
break; break;
case WL_CRIMSONROCK: case WL_CRIMSONROCK:
sc_start(src,bl, SC_STUN, 40, skill_lv, skill_get_time(skill_id, skill_lv)); sc_start(src,bl, SC_STUN, 40, skill_lv, skill_get_time(skill_id, skill_lv));

View File

@ -6156,7 +6156,7 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
if( sd && sc->data[SC_DANCING] ) if( sd && sc->data[SC_DANCING] )
val = max( val, 500 - (40 + 10 * (sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_BARDDANCER)) * pc_checkskill(sd,(sd->status.sex?BA_MUSICALLESSON:DC_DANCINGLESSON)) ); val = max( val, 500 - (40 + 10 * (sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_BARDDANCER)) * pc_checkskill(sd,(sd->status.sex?BA_MUSICALLESSON:DC_DANCINGLESSON)) );
if( sc->data[SC_DECREASEAGI] || sc->data[SC_ADORAMUS] ) if( sc->data[SC_DECREASEAGI] )
val = max( val, 25 ); val = max( val, 25 );
if( sc->data[SC_QUAGMIRE] || sc->data[SC_HALLUCINATIONWALK_POSTDELAY] || (sc->data[SC_GLOOMYDAY] && sc->data[SC_GLOOMYDAY]->val4) ) if( sc->data[SC_QUAGMIRE] || sc->data[SC_HALLUCINATIONWALK_POSTDELAY] || (sc->data[SC_GLOOMYDAY] && sc->data[SC_GLOOMYDAY]->val4) )
val = max( val, 50 ); val = max( val, 50 );
@ -7487,11 +7487,11 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ
tick_def2 = status->luk*10; tick_def2 = status->luk*10;
break; break;
case SC_DECREASEAGI: case SC_DECREASEAGI:
case SC_ADORAMUS: // Arch Bishop
if (sd) if (sd)
tick >>= 1; // Half duration for players. tick >>= 1; // Half duration for players.
sc_def = status->mdef*100; // Fall through
tick_def = 0; // No duration reduction case SC_ADORAMUS: // Arch Bishop
sc_def2 = status->mdef*100;
break; break;
case SC_ANKLE: case SC_ANKLE:
if(status->mode&MD_BOSS) // Lasts 5 times less on bosses if(status->mode&MD_BOSS) // Lasts 5 times less on bosses
@ -7864,7 +7864,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
case SC_DECREASEAGI: case SC_DECREASEAGI:
case SC_QUAGMIRE: case SC_QUAGMIRE:
case SC_DONTFORGETME: case SC_DONTFORGETME:
case SC_ADORAMUS:
if(sc->data[SC_SPEEDUP1]) if(sc->data[SC_SPEEDUP1])
return 0; return 0;
break; break;
@ -7941,15 +7940,13 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
case SC_ADRENALINE: case SC_ADRENALINE:
if (sc->data[SC_QUAGMIRE] || if (sc->data[SC_QUAGMIRE] ||
sc->data[SC_DECREASEAGI] || sc->data[SC_DECREASEAGI] ||
sc->data[SC_ADORAMUS] ||
sc->option&OPTION_MADOGEAR // Adrenaline doesn't affect Mado Gear [Ind] sc->option&OPTION_MADOGEAR // Adrenaline doesn't affect Mado Gear [Ind]
) )
return 0; return 0;
break; break;
case SC_ADRENALINE2: case SC_ADRENALINE2:
if (sc->data[SC_QUAGMIRE] || if (sc->data[SC_QUAGMIRE] ||
sc->data[SC_DECREASEAGI] || sc->data[SC_DECREASEAGI]
sc->data[SC_ADORAMUS]
) )
return 0; return 0;
break; break;
@ -7960,7 +7957,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
case SC_ONEHAND: case SC_ONEHAND:
case SC_MERC_QUICKEN: case SC_MERC_QUICKEN:
case SC_TWOHANDQUICKEN: case SC_TWOHANDQUICKEN:
if(sc->data[SC_DECREASEAGI] || sc->data[SC_ADORAMUS]) if(sc->data[SC_DECREASEAGI])
return 0; return 0;
case SC_INCREASEAGI: case SC_INCREASEAGI:
case SC_CONCENTRATE: case SC_CONCENTRATE:
@ -8264,7 +8261,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
break; break;
case SC_INCREASEAGI: case SC_INCREASEAGI:
status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER); status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER);
status_change_end(bl, SC_ADORAMUS, INVALID_TIMER);
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH) if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH)
status_change_end(bl, SC_SPIRIT, INVALID_TIMER); status_change_end(bl, SC_SPIRIT, INVALID_TIMER);
break; break;
@ -8275,7 +8271,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
status_change_end(bl, SC_MAGNETICFIELD, INVALID_TIMER); status_change_end(bl, SC_MAGNETICFIELD, INVALID_TIMER);
// Also blocks the ones below... // Also blocks the ones below...
case SC_DECREASEAGI: case SC_DECREASEAGI:
case SC_ADORAMUS: if (type == SC_DECREASEAGI) {
status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER);
status_change_end(bl, SC_ADORAMUS, INVALID_TIMER);
}
status_change_end(bl, SC_CARTBOOST, INVALID_TIMER); status_change_end(bl, SC_CARTBOOST, INVALID_TIMER);
status_change_end(bl, SC_GN_CARTBOOST, INVALID_TIMER); status_change_end(bl, SC_GN_CARTBOOST, INVALID_TIMER);
// Also blocks the ones below... // Also blocks the ones below...
@ -8289,6 +8288,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
status_change_end(bl, SC_MERC_QUICKEN, INVALID_TIMER); status_change_end(bl, SC_MERC_QUICKEN, INVALID_TIMER);
status_change_end(bl, SC_ACCELERATION, INVALID_TIMER); status_change_end(bl, SC_ACCELERATION, INVALID_TIMER);
break; break;
case SC_ADORAMUS:
status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER);
break;
case SC_ONEHAND: case SC_ONEHAND:
// Removes the Aspd potion effect, as reported by Vicious. [Skotlex] // Removes the Aspd potion effect, as reported by Vicious. [Skotlex]
status_change_end(bl, SC_ASPDPOTION0, INVALID_TIMER); status_change_end(bl, SC_ASPDPOTION0, INVALID_TIMER);
@ -8351,9 +8353,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
break; break;
case SC_GN_CARTBOOST: case SC_GN_CARTBOOST:
case SC_CARTBOOST: case SC_CARTBOOST:
if(sc->data[SC_DECREASEAGI] || sc->data[SC_ADORAMUS]) { // Cancel Decrease Agi, but take no further effect [Skotlex] if(sc->data[SC_DECREASEAGI]) { // Cancel Decrease Agi, but take no further effect [Skotlex]
status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER); status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER);
status_change_end(bl, SC_ADORAMUS, INVALID_TIMER);
return 0; return 0;
} }
//Cart Boost cannot be affected by Slow grace. Assumed if player got Slow Grace first, Cart Boost is failed //Cart Boost cannot be affected by Slow grace. Assumed if player got Slow Grace first, Cart Boost is failed
@ -8717,9 +8718,13 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
case SC_DECREASEAGI: case SC_DECREASEAGI:
case SC_INCREASEAGI: case SC_INCREASEAGI:
case SC_ADORAMUS: case SC_ADORAMUS:
if (type == SC_ADORAMUS) {
// 1000% base chance to blind, but still can be resisted
sc_start(src, bl, SC_BLIND, 1000, val1, skill_get_time(status_sc2skill(type), val1));
if (sc->data[SC_ADORAMUS])
return 0; //Adoramus can't refresh itself, but it can cause blind again
}
val2 = 2 + val1; // Agi change val2 = 2 + val1; // Agi change
if( type == SC_ADORAMUS )
sc_start(src,bl,SC_BLIND,val1 * 4 + (sd ? sd->status.job_level : 50) / 2,val1,skill_get_time(status_sc2skill(type),val1));
break; break;
case SC_ENDURE: case SC_ENDURE:
val2 = 7; // Hit-count [Celest] val2 = 7; // Hit-count [Celest]
@ -11356,9 +11361,6 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
} }
} }
break; break;
case SC_ADORAMUS:
status_change_end(bl, SC_BLIND, INVALID_TIMER);
break;
case SC__SHADOWFORM: case SC__SHADOWFORM:
{ {
struct map_session_data *s_sd = map_id2sd(sce->val2); struct map_session_data *s_sd = map_id2sd(sce->val2);