瀏覽代碼

- Kaite now works against all types of spells.
- Kaupe now works against all skills.
- Sanctuary now won't damage non-enemies.
- Blessing now will always give you bonus stats even if you are wearing undead armor.
- Linking skills now have their cast-time reduced by dex.


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

skotlex 19 年之前
父節點
當前提交
1839d33ce7
共有 6 個文件被更改,包括 40 次插入38 次删除
  1. 7 1
      Changelog-Trunk.txt
  2. 1 0
      db/Changelog.txt
  3. 0 15
      db/skill_castnodex_db.txt
  4. 9 6
      src/map/battle.c
  5. 5 4
      src/map/skill.c
  6. 18 12
      src/map/status.c

+ 7 - 1
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]

+ 1 - 0
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

+ 0 - 15
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

+ 9 - 6
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
 

+ 5 - 4
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))

+ 18 - 12
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:			/* ニ?ベルングの指輪 */