Преглед изворни кода

Fixed bugreport:5850 GN_HELLS_PLANT damage formula and behavior are now updated.
Fixed bugreport:5848 RK_DRAGONTRAINING should now work normally.

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

rud0lp20 пре 13 година
родитељ
комит
7771470c6c
6 измењених фајлова са 17 додато и 10 уклоњено
  1. 3 3
      db/pre-re/skill_cast_db.txt
  2. 3 3
      db/re/skill_cast_db.txt
  3. 2 1
      src/map/battle.c
  4. 1 1
      src/map/pc.h
  5. 1 1
      src/map/script.c
  6. 7 1
      src/map/skill.c

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

@@ -1604,9 +1604,9 @@
 2488,0,0,0,10000:12000:14000:16000:18000,0,0
 
 //-- GN_HELLS_PLANT
-2490,3000:3500:4000:4500:5000,500,0,40000,0,0
-//-- GN_HELLS_PLANT_ATK //CHECK Guessing durations 1 and 2 are for stun and bleeding.
-2491,0,0,0,6000,16000,0
+2490,3000:3500:4000:4500:5000,500,0,14000:21000:28000:35000:42000,0,0,0
+//-- GN_HELLS_PLANT_ATK 
+2491,0,0,0,20000,0,0,0
 //-- GN_MANDRAGORA
 2492,1000,500,0,30000,0,10000
 //-- GN_SLINGITEM //CHECK Whats durations 1 and 2 used for?

+ 3 - 3
db/re/skill_cast_db.txt

@@ -1605,9 +1605,9 @@
 2488,0,0,0,10000:12000:14000:16000:18000,0,0,0
 
 //-- GN_HELLS_PLANT
-2490,3000:3500:4000:4500:5000,500,0,40000,0,0,0
-//-- GN_HELLS_PLANT_ATK //CHECK Guessing durations 1 and 2 are for stun and bleeding.
-2491,0,0,0,6000,16000,0,0
+2490,3000:3500:4000:4500:5000,500,0,14000:21000:28000:35000:42000,0,0,0
+//-- GN_HELLS_PLANT_ATK 
+2491,0,0,0,20000,0,0,0
 //-- GN_MANDRAGORA
 2492,1000,500,0,30000,0,10000,0
 //-- GN_SLINGITEM //CHECK Whats durations 1 and 2 used for?

+ 2 - 1
src/map/battle.c

@@ -3955,7 +3955,8 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 		md.damage = 100 + 200 * skill_lv + sstatus->int_;
 		break;
 	case GN_HELLS_PLANT_ATK:
-		md.damage = sstatus->int_ * 4 * skill_lv * (10 / (10 - pc_checkskill(sd,AM_CANNIBALIZE)));//Need accurate official formula. [Rytech]
+		//[{( Hell Plant Skill Level x Caster’s Base Level ) x 10 } + {( Caster’s INT x 7 ) / 2 } x { 18 + ( Caster’s Job Level / 4 )] x ( 5 / ( 10 - Summon Flora Skill Level ))
+		md.damage = ( skill_lv * status_get_lv(src) * 10 ) + ( sstatus->int_ * 7 / 2 ) * ( 18 + (sd?sd->status.job_level:0) / 4 ) * ( 5 / (10 - (sd?pc_checkskill(sd,AM_CANNIBALIZE):0)) ); 
 		break;
 	}
 

+ 1 - 1
src/map/pc.h

@@ -613,7 +613,7 @@ enum e_pc_permission {
 #define pc_ischasewalk(sd)    ( (sd)->sc.option&OPTION_CHASEWALK )
 #define pc_iscarton(sd)       ( (sd)->sc.option&OPTION_CART )
 #define pc_isfalcon(sd)       ( (sd)->sc.option&OPTION_FALCON )
-#define pc_isriding(sd)       ( (sd)->sc.option&OPTION_RIDING || (sd)->sc.option&OPTION_DRAGON )
+#define pc_isriding(sd)       ( (sd)->sc.option&OPTION_RIDING )
 #define pc_isinvisible(sd)    ( (sd)->sc.option&OPTION_INVISIBLE )
 #define pc_is50overweight(sd) ( (sd)->weight*100 >= (sd)->max_weight*battle_config.natural_heal_weight_rate )
 #define pc_is90overweight(sd) ( (sd)->weight*10 >= (sd)->max_weight*9 )

+ 1 - 1
src/map/script.c

@@ -7865,7 +7865,7 @@ BUILDIN_FUNC(checkriding)
 	if( sd == NULL )
 		return 0;// no player attached, report source
 
-	if( pc_isriding(sd) || pc_isridingwug(sd) )
+	if( pc_isriding(sd) || pc_isridingwug(sd) || sd->sc.option&OPTION_DRAGON )
 		script_pushint(st, 1);
 	else
 		script_pushint(st, 0);

+ 7 - 1
src/map/skill.c

@@ -1337,6 +1337,10 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
 			sd->itemid = -1;
 		}
 		break;
+	case GN_HELLS_PLANT_ATK:
+		sc_start(bl, SC_STUN,  5 + 5 * skilllv, skilllv, skill_get_time2(skillid, skilllv));
+		sc_start(bl, SC_BLEEDING, 20 + 10 * skilllv, skilllv, skill_get_time2(skillid, skilllv));
+		break;
 	case EL_WIND_SLASH:	// Non confirmed rate.
 		sc_start(bl, SC_BLEEDING, 25, skilllv, skill_get_time(skillid,skilllv));
 		break;
@@ -10049,6 +10053,7 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
 		break;
 	case WZ_QUAGMIRE:	//The target changes to "all" if used in a gvg map. [Skotlex]
 	case AM_DEMONSTRATION:
+	case GN_HELLS_PLANT:
 		if (map_flag_vs(src->m) && battle_config.vs_traps_bctall
 			&& (src->type&battle_config.vs_traps_bctall))
 			target = BCT_ALL;
@@ -11186,7 +11191,8 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 		case UNT_HELLS_PLANT:
 			if( battle_check_target(&src->bl,bl,BCT_ENEMY) > 0 )
 				skill_attack(skill_get_type(GN_HELLS_PLANT_ATK), ss, &src->bl, bl, GN_HELLS_PLANT_ATK, sg->skill_lv, tick, 0);
-			sg->limit = DIFF_TICK(tick, sg->tick) + 100;
+			if( ss != bl) //The caster is the only one who can step on the Plants, without destroying them
+				sg->limit = DIFF_TICK(tick, sg->tick) + 100;
 			break;
 			
 		case UNT_CLOUD_KILL: