summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt8
-rw-r--r--db/Changelog.txt1
-rw-r--r--db/skill_castnodex_db.txt15
-rw-r--r--src/map/battle.c15
-rw-r--r--src/map/skill.c9
-rw-r--r--src/map/status.c30
6 files changed, 40 insertions, 38 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 93ebda1f0..0a77aecbf 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -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]
diff --git a/db/Changelog.txt b/db/Changelog.txt
index 800e177b9..b3a8e5093 100644
--- a/db/Changelog.txt
+++ b/db/Changelog.txt
@@ -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
diff --git a/db/skill_castnodex_db.txt b/db/skill_castnodex_db.txt
index e28deb30e..f4d7f6964 100644
--- a/db/skill_castnodex_db.txt
+++ b/db/skill_castnodex_db.txt
@@ -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
diff --git a/src/map/battle.c b/src/map/battle.c
index 45f7ac24d..641e17378 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -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
diff --git a/src/map/skill.c b/src/map/skill.c
index acbcdeb18..1bcd5a074 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -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))
diff --git a/src/map/status.c b/src/map/status.c
index e5b16aec3..53b9891f9 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -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: /* ニ?ベルングの指輪 */