From cb4297e6eb734c60825ebfa13f32989fa3a470eb Mon Sep 17 00:00:00 2001
From: smokexyz <sagunkho@hotmail.com>
Date: Wed, 22 Mar 2017 04:42:41 +0800
Subject: Fixes issue #1647

Allow skills and attacks with flags BCT_ENEMY and BCT_PARTY to affect "guild enemy units" within the party on maps with flag `gvg` and `gvg_noparty`.
---
 src/map/battle.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/map/battle.c b/src/map/battle.c
index 77bb99730..8b6ac2cc0 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -6814,14 +6814,23 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
 		if( flag&(BCT_PARTY|BCT_ENEMY) ) {
 			int s_party = status->get_party_id(s_bl);
 			int s_guild = status->get_guild_id(s_bl);
-
-			if( s_party && s_party == status->get_party_id(t_bl)
-			 && !(map->list[m].flag.pvp && map->list[m].flag.pvp_noparty)
-			 && !(map_flag_gvg(m) && map->list[m].flag.gvg_noparty && !( s_guild && s_guild == status->get_guild_id(t_bl) ))
-			 && (!map->list[m].flag.battleground || sbg_id == tbg_id) )
-				state |= BCT_PARTY;
-			else
+			int t_guild = status->get_guild_id(t_bl);
+			
+			if (s_party && s_party == status->get_party_id(t_bl)) {
+				if (map_flag_gvg(m) && map->list[m].flag.gvg_noparty && !(s_guild && s_guild == t_guild)) {
+					if (t_guild && guild->isallied(s_guild, t_guild))
+						state |= BCT_PARTY;
+					else
+						state |= flag&BCT_ENEMY ? BCT_ENEMY : BCT_PARTY;
+				} else if (!(map->list[m].flag.pvp && map->list[m].flag.pvp_noparty)
+					&& (!map->list[m].flag.battleground || sbg_id == tbg_id)) {
+					state |= BCT_PARTY;
+				} else {
+					state |= BCT_ENEMY;
+				}
+			} else {
 				state |= BCT_ENEMY;
+			}
 		}
 		if( flag&(BCT_GUILD|BCT_ENEMY) ) {
 			int s_guild = status->get_guild_id(s_bl);
-- 
cgit v1.2.3-70-g09d2