- Kaite now works against all types of spells.
- Kaupe now works against all skills. - Sanctuary now won't damage non-enemies. - Blessing now will always give you bonus stats even if you are wearing undead armor. - Linking skills now have their cast-time reduced by dex. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6447 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
64618b2b98
commit
1839d33ce7
@ -3,7 +3,12 @@ Date Added
|
||||
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
|
||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||
|
||||
2006/05/01
|
||||
2006/05/02
|
||||
* Kaite now works against all types of spells. [Skotlex]
|
||||
* Kaupe now works against all skills. [Skotlex]
|
||||
* Sanctuary now won't damage non-enemies. [Skotlex]
|
||||
* Blessing now will always give you bonus stats even if you are wearing
|
||||
undead armor. [Skotlex]
|
||||
* Modified how Rogue's treasure works so that you get +1% to your steal
|
||||
rate rather than +0.01% to the final rate. [Skotlex]
|
||||
* Rewrote Warmth to use ground-skill-units, it should behave now like in
|
||||
@ -16,6 +21,7 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||
behaves). [Skotlex]
|
||||
* Allowed SG_FEEL memorizing the same map for all three. [Skotlex]
|
||||
* SC_FUSION won't end when you die now. [Skotlex]
|
||||
2006/05/01
|
||||
* Added knockback when you run into a wall during running. However
|
||||
position is not being refreshed on the client yet... [Skotlex]
|
||||
* Fixed pc_disguise not allowing you to "redisguise". [Skotlex]
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
=========================
|
||||
05/02
|
||||
* Linking skills now have their cast-time reduced by dex. [Skotlex]
|
||||
* Lowered the duration of Speed Potion to 5 seconds [Playtester]
|
||||
- now it's doubled speed for 5 seconds
|
||||
05/01
|
||||
|
@ -17,21 +17,6 @@
|
||||
409,1 //WE_CALLPARENT
|
||||
410,1 //WE_CALLBABY
|
||||
482,1 //PF_DOUBLECASTING
|
||||
445,1 //SL_ALCHEMIST
|
||||
447,1 //SL_MONK
|
||||
448,1 //SL_STAR
|
||||
449,1 //SL_SAGE
|
||||
450,1 //SL_CRUSADER
|
||||
451,1 //SL_SUPERNOVICE
|
||||
452,1 //SL_KNIGHT
|
||||
453,1 //SL_WIZARD
|
||||
454,1 //SL_PRIEST
|
||||
455,1 //SL_BARDDANCER
|
||||
456,1 //SL_ROGUE
|
||||
457,1 //SL_ASSASIN
|
||||
458,1 //SL_BLACKSMITH
|
||||
460,1 //SL_HUNTER
|
||||
461,1 //SL_SOULLINKER
|
||||
462,1 //SL_KAIZEL
|
||||
467,1 //SL_STIN
|
||||
468,1 //SL_STUN
|
||||
|
@ -461,7 +461,14 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
|
||||
if(sc->data[SC_FOGWALL].timer != -1 && flag&BF_MAGIC
|
||||
&& rand()%100 < 75 && !(skill_get_inf(skill_num)&INF_GROUND_SKILL))
|
||||
return 0;
|
||||
|
||||
|
||||
if(sc->data[SC_KAUPE].timer != -1 && rand()%100 < sc->data[SC_KAUPE].val2)
|
||||
{
|
||||
if (--sc->data[SC_KAUPE].val3 <= 0) //We make it work like Safety Wall, even though it only blocks 1 time.
|
||||
status_change_end(bl, SC_KAUPE, -1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//Now damage increasing effects
|
||||
if(sc->data[SC_AETERNA].timer!=-1 && skill_num != PA_PRESSURE && skill_num != PF_SOULBURN){
|
||||
damage<<=1;
|
||||
@ -1363,11 +1370,7 @@ static struct Damage battle_calc_weapon_attack(
|
||||
|
||||
if(rand()%100 >= hitrate)
|
||||
wd.dmg_lv = ATK_FLEE;
|
||||
else if (tsc && tsc->data[SC_KAUPE].timer != -1 && rand()%100 < tsc->data[SC_KAUPE].val2) {
|
||||
if (--tsc->data[SC_KAUPE].val3 <= 0) //We make it work like Safety Wall, even though it only blocks 1 time.
|
||||
status_change_end(target, SC_KAUPE, -1);
|
||||
wd.dmg_lv = ATK_FLEE;
|
||||
} else
|
||||
else
|
||||
flag.hit =1;
|
||||
} //End hit/miss calculation
|
||||
|
||||
|
@ -1743,7 +1743,7 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
|
||||
if (sc && !sc->count)
|
||||
sc = NULL; //Don't need it.
|
||||
|
||||
if (attack_type&BF_MAGIC && sc && sc->data[SC_KAITE].timer != -1 && src == dsrc
|
||||
if (attack_type&BF_MAGIC && sc && sc->data[SC_KAITE].timer != -1
|
||||
&& !(status_get_mode(src)&MD_BOSS) && (sd || status_get_lv(dsrc) <= 80) //Works on players or mobs with level under 80.
|
||||
) { //Bounce back the skill.
|
||||
if (--sc->data[SC_KAITE].val2 <= 0)
|
||||
@ -6833,11 +6833,12 @@ int skill_unit_onplace_timer(struct skill_unit *src,struct block_list *bl,unsign
|
||||
{
|
||||
int race = status_get_race(bl);
|
||||
|
||||
if (battle_check_undead(race, status_get_elem_type(bl)) || race==RC_DEMON) {
|
||||
if (skill_attack(BF_MAGIC, ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0)) {
|
||||
if (battle_check_undead(race, status_get_elem_type(bl)) || race==RC_DEMON)
|
||||
{ //Only damage enemies with offensive Sanctuary. [Skotlex]
|
||||
if(battle_check_target(&src->bl,bl,BCT_ENEMY)>0 &&
|
||||
skill_attack(BF_MAGIC, ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0))
|
||||
// reduce healing count if this was meant for damaging [hekate]
|
||||
sg->val1 -= 2;
|
||||
}
|
||||
} else {
|
||||
int heal = sg->val2;
|
||||
if (status_get_hp(bl) >= status_get_max_hp(bl))
|
||||
|
@ -1675,10 +1675,10 @@ int status_calc_str(struct block_list *bl, int str)
|
||||
if(sc->data[SC_SPURT].timer!=-1)
|
||||
str += 10; //Bonus is +!0 regardless of skill level
|
||||
if(sc->data[SC_BLESSING].timer != -1){
|
||||
int race = status_get_race(bl);
|
||||
if(battle_check_undead(race,status_get_elem_type(bl)) || race == RC_DEMON)
|
||||
if(sc->data[SC_BLESSING].val2)
|
||||
str += sc->data[SC_BLESSING].val2;
|
||||
else
|
||||
str >>= 1;
|
||||
else str += sc->data[SC_BLESSING].val1;
|
||||
}
|
||||
if(sc->data[SC_NEN].timer!=-1)
|
||||
str += sc->data[SC_NEN].val1;
|
||||
@ -1755,10 +1755,10 @@ int status_calc_int(struct block_list *bl, int int_)
|
||||
if(sc->data[SC_TRUESIGHT].timer!=-1)
|
||||
int_ += 5;
|
||||
if(sc->data[SC_BLESSING].timer != -1){
|
||||
int race = status_get_race(bl);
|
||||
if(battle_check_undead(race,status_get_elem_type(bl)) || race == RC_DEMON)
|
||||
if (sc->data[SC_BLESSING].val2)
|
||||
int_ += sc->data[SC_BLESSING].val2;
|
||||
else
|
||||
int_ >>= 1;
|
||||
else int_ += sc->data[SC_BLESSING].val1;
|
||||
}
|
||||
if(sc->data[SC_STRIPHELM].timer!=-1 && bl->type != BL_PC)
|
||||
int_ -= int_ * 8*sc->data[SC_STRIPHELM].val1/100;
|
||||
@ -1787,10 +1787,10 @@ int status_calc_dex(struct block_list *bl, int dex)
|
||||
if(sc->data[SC_QUAGMIRE].timer!=-1)
|
||||
dex -= sc->data[SC_QUAGMIRE].val1*(bl->type==BL_PC?5:10);
|
||||
if(sc->data[SC_BLESSING].timer != -1){
|
||||
int race = status_get_race(bl);
|
||||
if(battle_check_undead(race,status_get_elem_type(bl)) || race == RC_DEMON)
|
||||
if (sc->data[SC_BLESSING].val2)
|
||||
dex += sc->data[SC_BLESSING].val2;
|
||||
else
|
||||
dex >>= 1;
|
||||
else dex += sc->data[SC_BLESSING].val1;
|
||||
}
|
||||
if(sc->data[SC_INCREASING].timer!=-1)
|
||||
dex += 4; // added based on skill updates [Reddozen]
|
||||
@ -3753,7 +3753,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
|
||||
return 0;
|
||||
switch (type) {
|
||||
case SC_BLESSING:
|
||||
if (!undead_flag || race != RC_DEMON)
|
||||
if (!undead_flag && race != RC_DEMON)
|
||||
break;
|
||||
case SC_QUAGMIRE:
|
||||
case SC_DECREASEAGI:
|
||||
@ -3768,7 +3768,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
|
||||
//Before overlapping fail, one must check for status cured.
|
||||
switch (type) {
|
||||
case SC_BLESSING:
|
||||
if (!undead_flag && race!=RC_DEMON) {
|
||||
if ((!undead_flag && race!=RC_DEMON) || bl->type == BL_PC) {
|
||||
if (sc->data[SC_CURSE].timer!=-1)
|
||||
status_change_end(bl,SC_CURSE,-1);
|
||||
if (sc->data[SC_STONE].timer!=-1 && sc->data[SC_STONE].val2==0)
|
||||
@ -4441,13 +4441,19 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
|
||||
val2 = 200*val1; //HP heal
|
||||
val3 = 5*val1; //SP cost
|
||||
break;
|
||||
case SC_BLESSING:
|
||||
if ((!undead_flag && race!=RC_DEMON) || bl->type == BL_PC)
|
||||
val2 = val1;
|
||||
else
|
||||
val2 = 0; //0 -> Half stat.
|
||||
calc_flag = 1;
|
||||
break;
|
||||
case SC_TRICKDEAD: /* 死んだふり */
|
||||
{
|
||||
struct view_data *vd = status_get_viewdata(bl);
|
||||
if (vd) vd->dead_sit = 1;
|
||||
break;
|
||||
}
|
||||
case SC_BLESSING:
|
||||
case SC_CONCENTRATION: /* コンセントレ?ション */case SC_ETERNALCHAOS: /* エタ?ナルカオス */
|
||||
case SC_DRUMBATTLE: /* ?太鼓の響き */
|
||||
case SC_NIBELUNGEN: /* ニ?ベルングの指輪 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user