Jelajahi Sumber

Fixed a few Ranger-related skills (bugreport:5272)
- Added check to not allow attacks when mounted on a Warg
- Added check to only allow a certain amount of skills when mounted on a Warg
- Updated Warg Bite's chance rate of immobilization and duration
- Updated Arrowstorm and Aimed Bolt's skill ratio damage

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

xantara 13 tahun lalu
induk
melakukan
7a6949a30f
3 mengubah file dengan 27 tambahan dan 7 penghapusan
  1. 3 3
      src/map/battle.c
  2. 22 2
      src/map/skill.c
  3. 2 2
      src/map/unit.c

+ 3 - 3
src/map/battle.c

@@ -1995,11 +1995,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 				 **/
 				case RA_ARROWSTORM:
 					skillratio += 100 + 50 * skill_lv;
-					if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200;	// Base level bonus.
+					if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) / 100);	// Base level bonus.
 					break;
 				case RA_AIMEDBOLT:
-					skillratio += 400 + 50 * skill_lv;
-					if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200;	// Base level bonus.
+					skillratio += 500 + 50 * skill_lv;
+					if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) / 100);	// Base level bonus.
 					if( tsc && (tsc->data[SC_BITE] || tsc->data[SC_ANKLE] || tsc->data[SC_ELECTRICSHOCKER]) )
 						wd.div_ = tstatus->size + 2 + rnd()%2;
 					break;

+ 22 - 2
src/map/skill.c

@@ -1142,8 +1142,12 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
 	 * Ranger
 	 **/
 	case RA_WUGBITE:
-		sc_start(bl, SC_BITE, 70, skilllv, skill_get_time(skillid, skilllv) + (sd ? pc_checkskill(sd,RA_TOOTHOFWUG) * 1000 : 0)); // Need official chance.
-		break;
+		{
+			int chance = (50+10*skilllv)-(sstatus->agi/4) + (sd ? pc_checkskill(sd,RA_TOOTHOFWUG)*2 : 0);
+			if(chance < 50) chance = 50;
+			sc_start(bl, SC_BITE, chance, skilllv, (skilllv + (sd ? pc_checkskill(sd,RA_TOOTHOFWUG)/2 : 0)) * 1000);
+			break;
+		}
 	case RA_SENSITIVEKEEN:
 		if( rnd()%100 < 8 * skilllv )
 			skill_castend_damage_id(src, bl, RA_WUGBITE, sd ? pc_checkskill(sd, RA_WUGBITE):skilllv, tick, SD_ANIMATION);
@@ -10984,6 +10988,22 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
 	//Can only update state when weapon/arrow info is checked.
 	sd->state.arrow_atk = require.ammo?1:0;
 
+	// Check the skills that can be used while mounted on a warg
+	if( pc_isridingwug(sd) )
+	{
+		switch( skill )
+		{
+		case HT_SKIDTRAP:     case HT_LANDMINE:     case HT_ANKLESNARE:     case HT_SHOCKWAVE:
+		case HT_SANDMAN:      case HT_FLASHER:      case HT_FREEZINGTRAP:   case HT_BLASTMINE:
+		case HT_CLAYMORETRAP: case HT_SPRINGTRAP:   case RA_DETONATOR:      case RA_CLUSTERBOMB:
+		case RA_WUGDASH:      case RA_WUGRIDER:
+			break;
+		default:
+			clif_skill_fail(sd,skill,USESKILL_FAIL_LEVEL,0);
+			return 0;
+		}
+	}
+	
 	// perform skill-specific checks (and actions)
 	switch( skill )
 	{

+ 2 - 2
src/map/unit.c

@@ -1496,8 +1496,8 @@ int unit_attack(struct block_list *src,int target_id,int continuous)
 			npc_click(sd,(TBL_NPC*)target); // submitted by leinsirk10 [Celest]
 			return 0;
 		}
-		if( pc_is90overweight(sd) )
-		{ // overweight - stop attacking
+		if( pc_is90overweight(sd) || pc_isridingwug(sd) )
+		{ // overweight or mounted on warg - stop attacking
 			unit_stop_attack(src);
 			return 0;
 		}