فهرست منبع

A rather ugly fix to fix knockback for Firewall, Stormgust and Sanctuary

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@10869 54d463be-8e91-2dee-dedb-b68131a5f0ec
ultramage 18 سال پیش
والد
کامیت
a55b2e9533
2فایلهای تغییر یافته به همراه12 افزوده شده و 7 حذف شده
  1. 2 6
      src/map/battle.c
  2. 10 1
      src/map/skill.c

+ 2 - 6
src/map/battle.c

@@ -2166,18 +2166,14 @@ struct Damage battle_calc_magic_attack(
 	switch(skill_num)
 	{
 		case MG_FIREWALL:
+			ad.dmotion = 0; //No flinch animation.
 			if(mflag) //mflag has a value when it was checked against an undead in skill.c [Skotlex]
 				ad.blewcount = 0; //No knockback
-			else
-				ad.blewcount |= 0x10000;
+			break;
 		case HW_GRAVITATION:
 			ad.dmotion = 0; //No flinch animation.
 			break;
-		case WZ_STORMGUST: //Should knockback randomly.
-			ad.blewcount|=0x40000;
-			break;
 		case PR_SANCTUARY:
-			ad.blewcount|=0x10000;
 			ad.dmotion = 0; //No flinch animation.
 			break;
 	}

+ 10 - 1
src/map/skill.c

@@ -2141,7 +2141,16 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
 
 	//Only knockback if it's still alive, otherwise a "ghost" is left behind. [Skotlex]
 	if (dmg.blewcount > 0 && !status_isdead(bl))
-		skill_blown(dsrc,bl,dmg.blewcount,-1,0);
+	{
+		int direction = -1; // default
+		switch(skillid)
+		{
+			case MG_FIREWALL:  direction = unit_getdir(bl); break; // backwards
+			case WZ_STORMGUST: direction = rand()%8;        break; // randomly
+			case PR_SANCTUARY: direction = unit_getdir(bl); break; // backwards
+		}
+		skill_blown(dsrc,bl,dmg.blewcount,direction,0);
+	}
 	
 	//Delayed damage must be dealt after the knockback (it needs to know actual position of target)
 	if (dmg.amotion)