Browse Source

- Gospel no longer blocks item usage of whoever is in the area of effect.
- Added the long/near attack_def_rate card effects to battle_calc_magic
- Cleaned up a bit the slim pitcher code.
- Elemental fields should vanish on map-change now.
- Land Protector only blocks magical skills.
- Adjusted the duration of blind/bleeding of Meteor Assault


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5426 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 19 years ago
parent
commit
898a5cb482
7 changed files with 53 additions and 29 deletions
  1. 6 0
      Changelog-Trunk.txt
  2. 1 0
      db/Changelog.txt
  3. 1 1
      db/skill_cast_db.txt
  4. 1 1
      db/skill_unit_db.txt
  5. 6 0
      src/map/battle.c
  6. 9 7
      src/map/pc.c
  7. 29 20
      src/map/skill.c

+ 6 - 0
Changelog-Trunk.txt

@@ -5,6 +5,12 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.  EV
 GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
 GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
 
 
 2006/03/02
 2006/03/02
+	* Gospel no longer blocks item usage of whoever is in the area of effect,
+	  only the caster of Gospel can't use healing items now. [Skotlex]
+	* Added the long/near attack_def_rate card effects to battle_calc_magic
+	  (horn card and the like will now work with spells) [Skotlex]
+	- Elemental fields should vanish on map-change now. [Skotlex]
+	- Land Protector only blocks magical ground skills now. [Skotlex]
 	* Fixed item pickup not picking anything unless you were in a party with
 	* Fixed item pickup not picking anything unless you were in a party with
 	  item distribution set [Skotlex]
 	  item distribution set [Skotlex]
 2006/03/01
 2006/03/01

+ 1 - 0
db/Changelog.txt

@@ -26,6 +26,7 @@
 
 
 =========================
 =========================
 
 
+	* Adjusted SC durations for Meteor Assault [Skotlex]
 03/02
 03/02
 	* Temp Plugs for NJ and GS items [Poki#3]
 	* Temp Plugs for NJ and GS items [Poki#3]
 	* Fixed some skill warnings. [Poki#3]
 	* Fixed some skill warnings. [Poki#3]

+ 1 - 1
db/skill_cast_db.txt

@@ -639,7 +639,7 @@
 //-- PF_SPIDERWEB
 //-- PF_SPIDERWEB
 405,0,0,30000,8000
 405,0,0,30000,8000
 //-- ASC_METEORASSAULT (Upkeep2 times are duration of: blind(lv1), stun(lv2) or bleeding (lv3)
 //-- ASC_METEORASSAULT (Upkeep2 times are duration of: blind(lv1), stun(lv2) or bleeding (lv3)
-406,500,500,0,5000:5000:10000
+406,500,500,0,10000:5000:120000
 //-- ASC_CDP
 //-- ASC_CDP
 407,0,5000,0,0
 407,0,5000,0,0
 //==========================================
 //==========================================

+ 1 - 1
db/skill_unit_db.txt

@@ -75,7 +75,7 @@
 336,0xb2,    ,  0,-1,  -1,noone, 0x000	//WE_CALLPARTNER#あなたに逢いたい
 336,0xb2,    ,  0,-1,  -1,noone, 0x000	//WE_CALLPARTNER#あなたに逢いたい
 339,0x86,    , -1, 0, 400,enemy, 0x000	//NPC_DARKGRANDCROSS#闇グランドクロス
 339,0x86,    , -1, 0, 400,enemy, 0x000	//NPC_DARKGRANDCROSS#闇グランドクロス
 362,0xb4,    ,  0, 3,  -1,all,   0x000	//HP_BASILICA#バジリカ
 362,0xb4,    ,  0, 3,  -1,all,   0x000	//HP_BASILICA#バジリカ
-369,0xb3,    , -1, 0,10000,all,  0x800	//PA_GOSPEL#ゴスペル
+369,0xb3,    , -1, 0,10000,all,  0x000	//PA_GOSPEL#ゴスペル
 404,0xb6,    , -1, 0,  -1,all,   0x000	//PF_FOGWALL#フォグウォール
 404,0xb6,    , -1, 0,  -1,all,   0x000	//PF_FOGWALL#フォグウォール
 405,0xb7,    ,  0, 1,1000,enemy, 0x000	//PF_SPIDERWEB#スパイダーウェッブ
 405,0xb7,    ,  0, 1,1000,enemy, 0x000	//PF_SPIDERWEB#スパイダーウェッブ
 484,0xb8,    ,  2, 0,1000,enemy, 0x808	//HW_GRAVITATION
 484,0xb8,    ,  2, 0,1000,enemy, 0x808	//HW_GRAVITATION

+ 6 - 0
src/map/battle.c

@@ -2671,6 +2671,12 @@ struct Damage battle_calc_magic_attack(
 					continue;
 					continue;
 				}
 				}
 			}
 			}
+			//It was discovered that ranged defense also counts vs magic! [Skotlex]
+			if (ad.flag&BF_SHORT)
+				cardfix=cardfix*(100-tsd->near_attack_def_rate)/100;
+			else
+				cardfix=cardfix*(100-tsd->long_attack_def_rate)/100;
+
 			cardfix=cardfix*(100-tsd->magic_def_rate)/100;
 			cardfix=cardfix*(100-tsd->magic_def_rate)/100;
 
 
 			MATK_RATE(cardfix);
 			MATK_RATE(cardfix);

+ 9 - 7
src/map/pc.c

@@ -2710,7 +2710,7 @@ int pc_useitem(struct map_session_data *sd,int n)
 		sd->sc.data[SC_MARIONETTE].timer!=-1 ||
 		sd->sc.data[SC_MARIONETTE].timer!=-1 ||
 		sd->sc.data[SC_GRAVITATION].timer!=-1 ||
 		sd->sc.data[SC_GRAVITATION].timer!=-1 ||
 		//Cannot use Potions/Healing items while under Gospel.
 		//Cannot use Potions/Healing items while under Gospel.
-		(sd->sc.data[SC_GOSPEL].timer!=-1 && sd->sc.data[SC_GOSPEL].val4 != BCT_SELF && sd->inventory_data[n]->type == 0)
+		(sd->sc.data[SC_GOSPEL].timer!=-1 && sd->sc.data[SC_GOSPEL].val4 == BCT_SELF && sd->inventory_data[n]->type == 0)
 	))
 	))
 		return 0;
 		return 0;
 	
 	
@@ -3134,6 +3134,14 @@ int pc_setpos(struct map_session_data *sd,unsigned short mapindex,int x,int y,in
 				status_change_end(&sd->bl,SC_STAR_COMFORT,-1);
 				status_change_end(&sd->bl,SC_STAR_COMFORT,-1);
 		}
 		}
 	}
 	}
+
+	if (sd->mapindex != mapindex)
+	{	//Misc map-changing settings
+		party_send_dot_remove(sd); //minimap dot fix [Kevin]
+		guild_send_dot_remove(sd);
+		skill_clear_element_field(&sd->bl);
+	}
+
 	if(sd->status.pet_id > 0 && sd->pd && sd->pet.intimate > 0) {
 	if(sd->status.pet_id > 0 && sd->pd && sd->pet.intimate > 0) {
 		pet_stopattack(sd->pd);
 		pet_stopattack(sd->pd);
 		pet_changestate(sd->pd,MS_IDLE,0);
 		pet_changestate(sd->pd,MS_IDLE,0);
@@ -3240,12 +3248,6 @@ int pc_setpos(struct map_session_data *sd,unsigned short mapindex,int x,int y,in
 		clif_changemap(sd,map[m].index,x,y); // [MouseJstr]
 		clif_changemap(sd,map[m].index,x,y); // [MouseJstr]
 	}
 	}
 		
 		
-	if (sd->mapindex != mapindex) //minimap dot fix [Kevin]
-	{
-		party_send_dot_remove(sd);
-		guild_send_dot_remove(sd);
-	}
-
 	sd->mapindex =  mapindex;
 	sd->mapindex =  mapindex;
 	sd->bl.m = m;
 	sd->bl.m = m;
 	sd->to_x = x;
 	sd->to_x = x;

+ 29 - 20
src/map/skill.c

@@ -2466,10 +2466,12 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
 		return 1;
 		return 1;
 
 
 	if (skillid && skill_get_type(skillid) == BF_MAGIC && 
 	if (skillid && skill_get_type(skillid) == BF_MAGIC && 
-		!battle_config.gtb_pvp_only && status_isimmune(bl))
+		!battle_config.gtb_pvp_only && status_isimmune(bl)) {
+		if (sd) clif_skill_fail(sd,skillid,0,0);
 		//GTB makes all targetted skills silently fail.
 		//GTB makes all targetted skills silently fail.
 		return 1;
 		return 1;
-
+	}
+	
 	sc = status_get_sc(src);	
 	sc = status_get_sc(src);	
 	if (sc && !sc->count)
 	if (sc && !sc->count)
 		sc = NULL; //Unneeded
 		sc = NULL; //Unneeded
@@ -5243,21 +5245,19 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 
 
 	// Slim Pitcher
 	// Slim Pitcher
 	case CR_SLIMPITCHER:
 	case CR_SLIMPITCHER:
-		{
-			if (sd && flag&1) {
-				struct block_list tbl;
-				int hp = potion_hp * (100 + pc_checkskill(sd,CR_SLIMPITCHER)*10 + pc_checkskill(sd,AM_POTIONPITCHER)*10 + pc_checkskill(sd,AM_LEARNINGPOTION)*5)/100;
-				hp = hp * (100 + (status_get_vit(bl)<<1))/100;
-				if (dstsd) {
-					hp = hp * (100 + pc_checkskill(dstsd,SM_RECOVERY)*10)/100;
-				}
-				tbl.id = 0;
-				tbl.m = src->m;
-				tbl.x = src->x;
-				tbl.y = src->y;
-				clif_skill_nodamage(&tbl,bl,AL_HEAL,hp,1);
-				battle_heal(NULL,bl,hp,0,0);
+		if (potion_hp) {
+			struct block_list tbl;
+			int hp = potion_hp;
+			hp = hp * (100 + (status_get_vit(bl)<<1))/100;
+			if (dstsd) {
+				hp = hp * (100 + pc_checkskill(dstsd,SM_RECOVERY)*10)/100;
 			}
 			}
+			tbl.id = 0;
+			tbl.m = src->m;
+			tbl.x = src->x;
+			tbl.y = src->y;
+			clif_skill_nodamage(&tbl,bl,AL_HEAL,hp,1);
+			battle_heal(NULL,bl,hp,0,0);
 		}
 		}
 		break;
 		break;
 	// Full Chemical Protection
 	// Full Chemical Protection
@@ -6120,6 +6120,12 @@ int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skil
 				pc_delitem(sd,j,skill_db[skillid].amount[i],0);
 				pc_delitem(sd,j,skill_db[skillid].amount[i],0);
 				potion_flag = 0;
 				potion_flag = 0;
 				clif_skill_poseffect(src,skillid,skilllv,x,y,tick);
 				clif_skill_poseffect(src,skillid,skilllv,x,y,tick);
+				//Apply skill bonuses
+				potion_hp = potion_hp * (100
+					+ pc_checkskill(sd,CR_SLIMPITCHER)*10
+				  	+ pc_checkskill(sd,AM_POTIONPITCHER)*10
+				  	+ pc_checkskill(sd,AM_LEARNINGPOTION)*5
+					)/100;
 				if(potion_hp > 0) {
 				if(potion_hp > 0) {
 					i = skill_get_splash(skillid, skilllv);
 					i = skill_get_splash(skillid, skilllv);
 					map_foreachinarea(skill_area_sub,
 					map_foreachinarea(skill_area_sub,
@@ -6634,7 +6640,8 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 	nullpo_retr(0, sg=src->group);
 	nullpo_retr(0, sg=src->group);
 	nullpo_retr(0, ss=map_id2bl(sg->src_id));
 	nullpo_retr(0, ss=map_id2bl(sg->src_id));
 
 
-	if (map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR))
+	if (skill_get_type(sg->skill_id) == BF_MAGIC &&
+		map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR))
 		return 0; //AoE skills are ineffective. [Skotlex]
 		return 0; //AoE skills are ineffective. [Skotlex]
 	
 	
 	if (battle_check_target(&src->bl,bl,sg->target_flag)<=0)
 	if (battle_check_target(&src->bl,bl,sg->target_flag)<=0)
@@ -6741,13 +6748,15 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 		if(src->limit + sg->tick > tick + 700)
 		if(src->limit + sg->tick > tick + 700)
 			src->limit = DIFF_TICK(tick+700,sg->tick);
 			src->limit = DIFF_TICK(tick+700,sg->tick);
 		break;
 		break;
+/* Removed. Gospel does not blocks item usage for others. [Skotlex]
 	case UNT_GOSPEL:
 	case UNT_GOSPEL:
 		if (sg->src_id != bl->id && sc && sc->data[type].timer==-1
 		if (sg->src_id != bl->id && sc && sc->data[type].timer==-1
 			&& battle_check_target(ss,bl,BCT_PARTY)>0)
 			&& battle_check_target(ss,bl,BCT_PARTY)>0)
 			//Start Gospel Effect to prevent item usage affects party only. [Skotlex]
 			//Start Gospel Effect to prevent item usage affects party only. [Skotlex]
 			status_change_start(bl,type,100,sg->skill_lv,0,0,BCT_ALL,sg->limit,0);
 			status_change_start(bl,type,100,sg->skill_lv,0,0,BCT_ALL,sg->limit,0);
 		break;
 		break;
-	}
+*/
+	}	
 
 
 	return sg->skill_id;
 	return sg->skill_id;
 }
 }
@@ -9536,8 +9545,8 @@ int skill_landprotector(struct block_list *bl, va_list ap )
 		return 1;
 		return 1;
 	}	
 	}	
 
 
-	if (skill_get_inf2(unit->group->skill_id)&INF2_TRAP)
-		return 0; //Traps cannot be removed by Land Protector/Ganbantein
+	if (skill_get_type(unit->group->skill_id) != BF_MAGIC)
+		return 0; //Only blocks out magical skills.````````
 	
 	
 	if (skillid == SA_LANDPROTECTOR || skillid == HW_GANBANTEIN ) {
 	if (skillid == SA_LANDPROTECTOR || skillid == HW_GANBANTEIN ) {
 		skill_delunit(unit);
 		skill_delunit(unit);