From 67ccaac795f50e3727a995d6e33861287fc7365d Mon Sep 17 00:00:00 2001
From: csnv <ctt@csnv.es>
Date: Mon, 15 Sep 2014 11:58:41 +0200
Subject: Revamped song fix

---
 src/map/skill.c | 21 +++++++--------------
 1 file changed, 7 insertions(+), 14 deletions(-)

diff --git a/src/map/skill.c b/src/map/skill.c
index 269663d91..aa87d9f4d 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -11470,9 +11470,7 @@ int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int64 tick
 			if (!sce)
 				sc_start4(ss,bl,type,100,sg->skill_lv,sg->val1,sg->val2,0,sg->limit);
 			break;
-		case UNT_APPLEIDUN:  // Apple of idun gets it from skill_unit_onplace_timer
-			if (!battle_config.song_timer_reset)
-				break;
+		case UNT_APPLEIDUN:
 		case UNT_WHISTLE:
 		case UNT_ASSASSINCROSS:
 		case UNT_POEMBRAGI:
@@ -11491,7 +11489,8 @@ int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int64 tick
 				sce->val4 = 0;
 				timer->delete(sce->timer, status->change_timer);
 				sce->timer = timer->add(tick+sg->limit, status->change_timer, bl->id, type);
-			}
+			} else if (!battle_config.song_timer_reset)
+
 			
 			break;
 
@@ -11868,22 +11867,16 @@ int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *bl, int6
 			if( md && md->class_ == MOBID_EMPERIUM )
 				break;
 #endif
-			if( sg->src_id == bl->id && !(tsc && tsc->data[SC_SOULLINK] && tsc->data[SC_SOULLINK]->val2 == SL_BARDDANCER) )
-				break; // affects self only when soullinked
+			if( sg->src_id == bl->id && !(tsc && tsc->data[SC_SOULLINK] && tsc->data[SC_SOULLINK]->val2 == SL_BARDDANCER)
+			  || (!(battle_config.song_timer_reset) && tsc && tsc->data[type] && tsc->data[type]->val4 == 1))
+				break;
 			heal = skill->calc_heal(ss,bl,sg->skill_id, sg->skill_lv, true);
 			if( tsc->data[SC_AKAITSUKI] && heal )
 				heal = ~heal + 1;
 			clif->skill_nodamage(&src->bl, bl, AL_HEAL, heal, 1);
 			status->heal(bl, heal, 0, 0);
-
-			if (!(battle_config.song_timer_reset) // songs don't reset prior timers
-			  && !(sg->src_id == bl->id && !(tsc && tsc->data[SC_SOULLINK] && tsc->data[SC_SOULLINK]->val2 == SL_BARDDANCER)) // Don't affect itself
-			  && (!(tsc->data[type]) || (tsc->data[type] && tsc->data[type]->val4 != 1))) // Check for 20 seconds song effect
-				sc_start4(ss,bl,type,100,sg->skill_lv,sg->val1,sg->val2,0,sg->interval + 100);
-
-			break;
 		}
-
+			break;
  		case UNT_TATAMIGAESHI:
 		case UNT_DEMONSTRATION:
 			skill->attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
-- 
cgit v1.2.3-70-g09d2


From 50e1f6c0781df16026cd64bdd87f206295c4a8aa Mon Sep 17 00:00:00 2001
From: csnv <ctt@csnv.es>
Date: Mon, 15 Sep 2014 22:22:17 +0200
Subject: Fixed song display, changed devotion conditions

- Fixed bug report http://hercules.ws/board/tracker/issue-8338-apple-of-iduns/?gopid=23558#entry23558
- Changes devotion check to work with reflect equipment of the target
---
 src/map/battle.c | 7 ++++---
 src/map/skill.c  | 3 +--
 src/map/status.c | 3 ++-
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/map/battle.c b/src/map/battle.c
index 07a195503..fbc166874 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -5393,8 +5393,7 @@ void battle_reflect_damage(struct block_list *target, struct block_list *src, st
 		sc = NULL;
 
 	if( sc ) {
-		if (sc->data[SC_DEVOTION] && !(wd->flag & BF_SKILL))
-			return; // No reflect for basic attacks on devoted characters
+		
 
 		if (wd->flag & BF_SHORT && !(skill->get_inf(skill_id) & (INF_GROUND_SKILL | INF_SELF_SKILL))) {
 			if( sc->data[SC_CRESCENTELBOW] && !is_boss(src) && rnd()%100 < sc->data[SC_CRESCENTELBOW]->val2 ){
@@ -5461,7 +5460,9 @@ void battle_reflect_damage(struct block_list *target, struct block_list *src, st
 
 		if( wd->dmg_lv >= ATK_BLOCK ) {/* yes block still applies, somehow gravity thinks it makes sense. */
 			if( sc ) {
-				if( sc->data[SC_REFLECTSHIELD] && skill_id != WS_CARTTERMINATION && skill_id != GS_DESPERADO ) {
+				if( sc->data[SC_REFLECTSHIELD] && skill_id != WS_CARTTERMINATION && skill_id != GS_DESPERADO
+				  && !(!(wd->flag&BF_SKILL) && sc->data[SC_DEVOTION])
+				  ) {
 					NORMALIZE_RDAMAGE(damage * sc->data[SC_REFLECTSHIELD]->val2 / 100);
 
 #ifndef RENEWAL
diff --git a/src/map/skill.c b/src/map/skill.c
index aa87d9f4d..97d4f3e9f 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -11489,9 +11489,8 @@ int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int64 tick
 				sce->val4 = 0;
 				timer->delete(sce->timer, status->change_timer);
 				sce->timer = timer->add(tick+sg->limit, status->change_timer, bl->id, type);
-			} else if (!battle_config.song_timer_reset)
+			}
 
-			
 			break;
 
 		case UNT_FOGWALL:
diff --git a/src/map/status.c b/src/map/status.c
index 4c136f870..4f7effa4a 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -1790,7 +1790,8 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
 	//If targeting, cloak+hide protect you, otherwise only hiding does.
 	hide_flag = flag?OPTION_HIDE:(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK);
 
-	//You cannot hide from ground skills.
+	// There is no NF for ground skills, but every earth type skill out there
+	// affects hidding except Stone Curse
 	if( skill->get_ele(skill_id,1) == ELE_EARTH && skill_id != MG_STONECURSE)
 		hide_flag &= ~OPTION_HIDE;
 
-- 
cgit v1.2.3-70-g09d2


From cb0de0393e20f2a85928d2c61bfe8a039486c3d6 Mon Sep 17 00:00:00 2001
From: csnv <ctt@csnv.es>
Date: Mon, 15 Sep 2014 22:27:40 +0200
Subject: Text align

---
 src/map/status.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/map/status.c b/src/map/status.c
index 4f7effa4a..7394c876a 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -6705,11 +6705,11 @@ void status_display_remove(struct map_session_data *sd, enum sc_type type) {
 * 'rate' = base success rate. 10000 = 100%
 * 'tick' is base duration
 * 'flag':
-* &1: Cannot be avoided (it has to start)
-* &2: Tick should not be reduced (by vit, luk, lv, etc)
-* &4: sc_data loaded, no value has to be altered.
-* &8: rate should not be reduced (not evaluated here, but in some calls to other functions)
-* &16: SI will not be sent to the client
+* &1 : Cannot be avoided (it has to start)
+* &2 : Tick should not be reduced (by vit, luk, lv, etc)
+* &4 : sc_data loaded, no value has to be altered.
+* &8 : rate should not be reduced (not evaluated here, but in some calls to other functions)
+* &16: Status icon (SI) should not be send
 *------------------------------------------*/
 int status_change_start(struct block_list *src, struct block_list *bl, enum sc_type type, int rate, int val1, int val2, int val3, int val4, int tick, int flag) {
 	struct map_session_data *sd = NULL;
-- 
cgit v1.2.3-70-g09d2