Updates Reflect Damage to official behavior - bugreport:7393
Fixes Weapon Crush to be an auto-attack skill - bugreport:7422 git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17241 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
bda715f6fe
commit
5fdada6013
@ -760,7 +760,7 @@
|
||||
2027,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_POISONINGWEAPON,Poisoning Weapon
|
||||
2028,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_WEAPONBLOCKING,Weapon Blocking
|
||||
2029,-2,6,4,-1,0x2,1,5,1,no,0,0,0,weapon,3, GC_COUNTERSLASH,Counter Slash
|
||||
2030,-2,6,4,-1,0x1,0,5,1,no,0,0x200,0,weapon,0, GC_WEAPONCRUSH,Weapon Crush //CHECK SHould this and the above skill have INF2 0x200?
|
||||
2030,-2,6,4,-1,0,0,5,1,no,0,0x200,0,weapon,0, GC_WEAPONCRUSH,Weapon Crush
|
||||
2031,1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, GC_VENOMPRESSURE,Venom Pressure
|
||||
2032,5,6,2,0,0x1,0,5,1,yes,0,0,1,none,0, GC_POISONSMOKE,Poison Smoke
|
||||
2033,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0, GC_CLOAKINGEXCEED,Cloaking Exceed
|
||||
|
@ -4612,9 +4612,13 @@ int battle_calc_return_damage(struct block_list* bl, struct block_list *src, int
|
||||
sc = status_get_sc(bl);
|
||||
|
||||
if( sc && sc->data[SC_REFLECTDAMAGE] ) {
|
||||
int max_damage = (int64)status_get_max_hp(bl) * status_get_lv(bl) / 100;
|
||||
rdamage = (int64)(*dmg) * sc->data[SC_REFLECTDAMAGE]->val2 / 100;
|
||||
if( rdamage > max_damage ) rdamage = max_damage;
|
||||
if( rnd()%100 <= sc->data[SC_REFLECTDAMAGE]->val1*10 + 30 ){
|
||||
int max_damage = (int64)status_get_max_hp(bl) * status_get_lv(bl) / 100;
|
||||
rdamage = (int64)(*dmg) * sc->data[SC_REFLECTDAMAGE]->val2 / 100;
|
||||
if( --(sc->data[SC_REFLECTDAMAGE]->val3) < 1)
|
||||
status_change_end(bl,SC_REFLECTDAMAGE,INVALID_TIMER);
|
||||
if( rdamage > max_damage ) rdamage = max_damage;
|
||||
}
|
||||
}else if( sc && sc->data[SC_CRESCENTELBOW] && !is_boss(src) && rnd()%100 < sc->data[SC_CRESCENTELBOW]->val2 ){
|
||||
//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
|
||||
int ratio = (int64)(status_get_hp(src) / 100) * sc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(bl) / 125;
|
||||
|
@ -2450,7 +2450,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
|
||||
damage = 1;
|
||||
|
||||
if( damage > 0 && (( dmg.flag&BF_WEAPON && src != bl && ( src == dsrc || ( dsrc->type == BL_SKILL && ( skill_id == SG_SUN_WARM || skill_id == SG_MOON_WARM || skill_id == SG_STAR_WARM ) ) ))
|
||||
|| (sc && sc->data[SC_REFLECTDAMAGE])) )
|
||||
|| ((sc && sc->data[SC_REFLECTDAMAGE]) && !dmg.flag&(BF_MAGIC|BF_LONG) && !skill_get_inf2(skill_id)&INF2_TRAP)) )
|
||||
rdamage = battle_calc_return_damage(bl,src, &damage, dmg.flag, skill_id);
|
||||
|
||||
if( damage && sc && sc->data[SC_GENSOU] && dmg.flag&BF_MAGIC ){
|
||||
|
@ -8472,10 +8472,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
}
|
||||
break;
|
||||
case SC_REFLECTDAMAGE:
|
||||
val2 = 15 + 5 * val1;
|
||||
val3 = (val1==5)?20:(val1+4)*2; // SP consumption
|
||||
val4 = tick/10000;
|
||||
tick_time = 10000; // [GodLesZ] tick time
|
||||
val2 = 15 + 5 * val1; // Reflect amount
|
||||
val3 = val1*5 + 25; // Number of reflects
|
||||
val4 = tick/1000; // Number of SP cycles (duration)
|
||||
tick_time = 1000; // [GodLesZ] tick time
|
||||
break;
|
||||
case SC_FORCEOFVANGUARD: // This is not the official way to handle it but I think we should use it. [pakpil]
|
||||
val2 = 20 + 12 * (val1 - 1); // Chance
|
||||
@ -10604,9 +10604,9 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
|
||||
|
||||
case SC_REFLECTDAMAGE:
|
||||
if( --(sce->val4) >= 0 ) {
|
||||
if( !status_charge(bl,0,sce->val3) )
|
||||
break;
|
||||
sc_timer_next(10000 + tick, status_change_timer, bl->id, data);
|
||||
if( !status_charge(bl,0,10) )
|
||||
break;
|
||||
sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user