Jelajahi Sumber

Fixes #261
* Corrected the skill behavior of Elemental Shield to match official.
- Thanks to @exneval and @Barigas.

aleos89 10 tahun lalu
induk
melakukan
2a04748bf4

+ 13 - 14
db/const.txt

@@ -1760,20 +1760,19 @@ SC_ALL_RIDING	592
 SC_TEARGAS_SOB	593
 SC__FEINTBOMB	594
 SC__CHAOS	595
-SC_ELEMENTAL_SHIELD	596
-SC_CHASEWALK2	597
-SC_VACUUM_EXTREME_POSTDELAY	598
-SC_MTF_ASPD2	599
-SC_MTF_RANGEATK2	600
-SC_MTF_MATK2	601
-SC_2011RWC_SCROLL	602
-SC_JP_EVENT04	603
-SC_MTF_MHP	604
-SC_MTF_MSP	605
-SC_MTF_PUMPKIN	606
-SC_MTF_HITFLEE	607
-SC_CRIFOOD	608
-SC_EXTREMITYFIST2	609
+SC_CHASEWALK2	596
+SC_VACUUM_EXTREME_POSTDELAY	597
+SC_MTF_ASPD2	598
+SC_MTF_RANGEATK2	599
+SC_MTF_MATK2	600
+SC_2011RWC_SCROLL	601
+SC_JP_EVENT04	602
+SC_MTF_MHP	603
+SC_MTF_MSP	604
+SC_MTF_PUMPKIN	605
+SC_MTF_HITFLEE	606
+SC_CRIFOOD	607
+SC_EXTREMITYFIST2	608
 
 //Status Icon
 SI_BLANK	-1

+ 0 - 3
db/pre-re/skill_cast_db.txt

@@ -1575,9 +1575,6 @@
 2467,1000,0,0,60000,0,60000
 //-- SO_EARTH_INSIGNIA
 2468,1000,0,0,60000,0,60000
-
-//-- SO_ELEMENTAL_SHIELD
-5008,1000,0,0,10000,0,10000
 //==========================================
 
 //==== Genetic skills ======================

+ 1 - 1
db/pre-re/skill_db.txt

@@ -1314,7 +1314,7 @@
 5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0,0x0, RK_LUXANIMA,Lux Anima
 5006,1,6,2,3,0,0,5,1,no,0,0,3,misc,0,0x0, NC_MAGMA_ERUPTION,Magma Eruption
 5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0,0x0, WM_FRIGG_SONG,Frigg's Song
-5008,0,6,4,0,0x3,15,5,1,no,0,0,0,none,0,0x0, SO_ELEMENTAL_SHIELD,Elemental Shield
+5008,0,6,4,0,0x3,11,5,1,no,0,0,0,none,0,0x0, SO_ELEMENTAL_SHIELD,Elemental Shield
 5009,1,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO,Flash Combo
 5010,0,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SC_ESCAPE,Emergency Escape
 5011,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, AB_OFFERTORIUM,Offertorium

+ 0 - 1
db/pre-re/skill_unit_db.txt

@@ -169,7 +169,6 @@
 3020,0xf8,    ,  0, 2, 500,all, 0x018   //KO_ZENKAI
 
 5006,0x101,   ,  0, 3, 500,enemy, 0x018	//NC_MAGMA_ERUPTION
-5008,0x85,    ,  0, 0,  -1,all,   0x003	//SO_ELEMENTAL_SHIELD
 5010,0xfe,    ,  0, 2,  -1,enemy, 0x000	//SC_ESCAPE
 5013,0x102,   ,  3, 0,  -1,all,   0x2002	//LG_KINGS_GRACE
 

+ 0 - 2
db/re/skill_cast_db.txt

@@ -1573,8 +1573,6 @@
 2467,1000,0,0,60000,0,60000,1000
 //-- SO_EARTH_INSIGNIA
 2468,1000,0,0,60000,0,60000,1000
-//-- SO_ELEMENTAL_SHIELD
-5008,1000,0,0,10000,0,10000,-1
 //==========================================
 
 //==== Genetic skills ======================

+ 1 - 1
db/re/skill_db.txt

@@ -1317,7 +1317,7 @@
 5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0,0x0, RK_LUXANIMA,Lux Anima
 5006,1,6,2,3,0x2,3,5,1,no,0,0,3,misc,0,0x0, NC_MAGMA_ERUPTION,Magma Eruption
 5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0,0x0, WM_FRIGG_SONG,Frigg's Song
-5008,0,6,4,0,0x3,15,5,1,no,0,0,0,none,0,0x0, SO_ELEMENTAL_SHIELD,Elemental Shield
+5008,0,6,4,0,0x3,11,5,1,no,0,0,0,none,0,0x0, SO_ELEMENTAL_SHIELD,Elemental Shield
 5009,1,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO,Flash Combo
 5010,0,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SC_ESCAPE,Emergency Escape
 5011,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, AB_OFFERTORIUM,Offertorium

+ 0 - 1
db/re/skill_unit_db.txt

@@ -171,7 +171,6 @@
 3020,0xf8,    ,  0, 2, 500,all, 0x018   //KO_ZENKAI
 
 5006,0x101,   ,  0, 3, 500,enemy, 0x018	//NC_MAGMA_ERUPTION
-5008,0x85,    ,  0, 0,  -1,all,   0x003	//SO_ELEMENTAL_SHIELD
 5010,0xfe,    ,  0, 2,  -1,enemy, 0x000	//SC_ESCAPE
 5013,0x102,   ,  3, 0,  -1,all,   0x2002	//LG_KINGS_GRACE
 

+ 0 - 5
src/map/battle.c

@@ -945,11 +945,6 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 			return 0;
 		}
 
-		if( sc->data[SC_ELEMENTAL_SHIELD] && flag&BF_MAGIC ) {
-			d->dmg_lv = ATK_BLOCK;
-			return 0;
-		}
-
 		if( sc->data[SC_PNEUMA] && (flag&(BF_MAGIC|BF_LONG)) == BF_LONG ) {
 			d->dmg_lv = ATK_BLOCK;
 			skill_blown(src,bl,skill_get_blewcount(skill_id,skill_lv),-1,0);

+ 15 - 24
src/map/skill.c

@@ -3424,8 +3424,7 @@ static int skill_check_unit_range_sub(struct block_list *bl, va_list ap)
 		case MH_STEINWAND:
 		case MG_SAFETYWALL:
 		case SC_MAELSTROM:
-		case SO_ELEMENTAL_SHIELD:
-			if(g_skill_id != MH_STEINWAND && g_skill_id != MG_SAFETYWALL && g_skill_id != AL_PNEUMA && g_skill_id != SC_MAELSTROM && g_skill_id != SO_ELEMENTAL_SHIELD)
+			if(g_skill_id != MH_STEINWAND && g_skill_id != MG_SAFETYWALL && g_skill_id != AL_PNEUMA && g_skill_id != SC_MAELSTROM)
 				return 0;
 			break;
 		case AL_WARP:
@@ -5676,30 +5675,28 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 
 				if(sd == NULL || !sd->ed)
 					break;
-				if((p = party_search(sd->status.party_id)) == NULL)
-					break;
 				range = skill_get_splash(skill_id,skill_lv);
 				x0 = sd->bl.x - range;
 				y0 = sd->bl.y - range;
 				x1 = sd->bl.x + range;
 				y1 = sd->bl.y + range;
+				clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
 				elemental_delete(sd->ed,0);
-				if(!skill_check_unit_range(src,src->x,src->y,skill_id,skill_lv))
-					ret = skill_castend_pos2(src,src->x,src->y,skill_id,skill_lv,tick,flag);
-				for(i = 0; i < MAX_PARTY; i++) {
-					struct map_session_data *psd = p->data[i].sd;
+				skill_unitsetting(src,MG_SAFETYWALL,skill_lv + 5,src->x,src->y,0);
+				skill_unitsetting(src,AL_PNEUMA,1,src->x,src->y,0);
+				if((p = party_search(sd->status.party_id))) {
+					for(i = 0; i < MAX_PARTY; i++) {
+						struct map_session_data *psd = p->data[i].sd;
 
-					if(!psd)
-						continue;
-					if(psd->bl.m != sd->bl.m || !psd->bl.prev)
-						continue;
-					if(range && (psd->bl.x < x0 || psd->bl.y < y0 ||
-						psd->bl.x > x1 || psd->bl.y > y1))
-						continue;
-					if(!skill_check_unit_range(bl,psd->bl.x,psd->bl.y,skill_id,skill_lv))
-						ret |= skill_castend_pos2(bl,psd->bl.x,psd->bl.y,skill_id,skill_lv,tick,flag);
+						if(!psd || psd->bl.m != sd->bl.m || !psd->bl.prev || psd->bl.id == sd->bl.id)
+							continue;
+						if(range && (psd->bl.x < x0 || psd->bl.y < y0 || psd->bl.x > x1 || psd->bl.y > y1))
+							continue;
+						skill_unitsetting(&psd->bl,MG_SAFETYWALL,skill_lv + 5,psd->bl.x,psd->bl.y,0);
+						skill_unitsetting(&psd->bl,AL_PNEUMA,1,psd->bl.x,psd->bl.y,0);
+					}
 				}
-				return ret;
+				return 0;
 			}
 			break;
 		case NPC_SMOKING: //Since it is a self skill, this one ends here rather than in damage_id. [Skotlex]
@@ -10389,10 +10386,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 		}
 		break;
 
-	case SO_ELEMENTAL_SHIELD:
-		// Used to avoid displaying the warning below.
-		break;
-
 	default:
 		ShowWarning("skill_castend_nodamage_id: Unknown skill used:%d\n",skill_id);
 		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
@@ -11189,7 +11182,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
 	case MH_STEINWAND:
 	case MH_XENO_SLASHER:
 	case LG_KINGS_GRACE:
-	case SO_ELEMENTAL_SHIELD:
 	case RL_B_TRAP:
 		flag|=1;//Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete).
 	case GS_GROUNDDRIFT: //Ammo should be deleted right away.
@@ -13701,7 +13693,6 @@ int skill_unit_onleft(uint16 skill_id, struct block_list *bl, unsigned int tick)
 		case GN_FIRE_EXPANSION_SMOKE_POWDER:
 		case GN_FIRE_EXPANSION_TEAR_GAS:
 		case LG_KINGS_GRACE:
-		case SO_ELEMENTAL_SHIELD:
 			if (sce)
 				status_change_end(bl, type, INVALID_TIMER);
 			break;

+ 0 - 1
src/map/status.c

@@ -746,7 +746,6 @@ void initChangeTables(void)
 	set_sc( SO_WATER_INSIGNIA	, SC_WATER_INSIGNIA	, SI_WATER_INSIGNIA	, SCB_WATK|SCB_ATK_ELE|SCB_REGEN );
 	set_sc( SO_WIND_INSIGNIA	, SC_WIND_INSIGNIA	, SI_WIND_INSIGNIA	, SCB_WATK|SCB_ATK_ELE|SCB_REGEN );
 	set_sc( SO_EARTH_INSIGNIA	, SC_EARTH_INSIGNIA	, SI_EARTH_INSIGNIA	, SCB_MDEF|SCB_DEF|SCB_MAXHP|SCB_MAXSP|SCB_WATK|SCB_ATK_ELE|SCB_REGEN );
-	add_sc( SO_ELEMENTAL_SHIELD  , SC_ELEMENTAL_SHIELD );
 
 	/* Genetic */
 	set_sc( GN_CARTBOOST			, SC_GN_CARTBOOST	, SI_GN_CARTBOOST			, SCB_SPEED );

+ 0 - 1
src/map/status.h

@@ -700,7 +700,6 @@ typedef enum sc_type {
 	SC_TEARGAS_SOB,
 	SC__FEINTBOMB,
 	SC__CHAOS,
-	SC_ELEMENTAL_SHIELD,
 	SC_CHASEWALK2,
 	SC_VACUUM_EXTREME_POSTDELAY,