Просмотр исходного кода

Fixed bugreport:5889 GC_ROLLINGCUTTER range and behavior are now updated.
Fixed part of bugreport:5880
-Fixed damage formula of NC_SELFDESTRUCTION.
-Fixed damage formula of GC_CROSSRIPPERSLASHER.

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

rud0lp20 13 лет назад
Родитель
Сommit
95795cf08a

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

@@ -1138,8 +1138,8 @@
 2034,0,1000,0,0,0,0
 //-- GC_HALLUCINATIONWALK
 2035,0,0,0,30000:35000:40000:45000:50000,25000,300000
-//-- GC_ROLLINGCUTTER //CHECK duration 1 (should be as long as esma status?)
-2036,0,200,0,4000,0,0
+//-- GC_ROLLINGCUTTER
+2036,0,200,0,3000,0,0
 //-- GC_CROSSRIPPERSLASHER
 2037,0,1000,0,0,0,0
 //==========================================

+ 1 - 1
db/pre-re/skill_db.txt

@@ -742,7 +742,7 @@
 2033,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,		GC_CLOAKINGEXCEED,Cloaking Exceed
 2034,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,0,	GC_PHANTOMMENACE,Phantom Menace
 2035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,		GC_HALLUCINATIONWALK,Hallucination Walk
-2036,0,6,4,-1,0x2,1,5,1,no,0,0,0,weapon,0,	GC_ROLLINGCUTTER,Rolling Cutter
+2036,0,6,4,-1,0x2,1:1:1:1:2,5,1,no,0,0,0,weapon,0,	GC_ROLLINGCUTTER,Rolling Cutter
 2037,7,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,	GC_CROSSRIPPERSLASHER,Cross Ripper Slasher
 
 //****

+ 2 - 2
db/re/skill_cast_db.txt

@@ -1139,8 +1139,8 @@
 2034,0,1000,0,0,0,0,0
 //-- GC_HALLUCINATIONWALK
 2035,0,0,0,30000:35000:40000:45000:50000,25000,300000,0
-//-- GC_ROLLINGCUTTER //CHECK duration 1 (should be as long as esma status?)
-2036,0,200,0,4000,0,0,0
+//-- GC_ROLLINGCUTTER 
+2036,0,200,0,3000,0,0,0
 //-- GC_CROSSRIPPERSLASHER
 2037,0,1000,0,0,0,0,0
 //==========================================

+ 1 - 1
db/re/skill_db.txt

@@ -743,7 +743,7 @@
 2033,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,	GC_CLOAKINGEXCEED,Cloaking Exceed
 2034,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,0,	GC_PHANTOMMENACE,Phantom Menace
 2035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,		GC_HALLUCINATIONWALK,Hallucination Walk
-2036,0,6,4,-1,0x2,1,5,1,no,0,0,0,weapon,0,	GC_ROLLINGCUTTER,Rolling Cutter
+2036,0,6,4,-1,0x2,1:1:1:1:2,5,1,no,0,0,0,weapon,0,	GC_ROLLINGCUTTER,Rolling Cutter
 2037,7,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,	GC_CROSSRIPPERSLASHER,Cross Ripper Slasher
 
 //****

+ 11 - 7
src/map/battle.c

@@ -2077,11 +2077,13 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 					break;
 				case GC_ROLLINGCUTTER:
 					skillratio += 20 * skill_lv;
+					RE_LVL_DMOD();
 					break;
 				case GC_CROSSRIPPERSLASHER:
-					skillratio += 60 + 40 * skill_lv;
+					skillratio += 300 + 80 * skill_lv;
+					RE_LVL_DMOD();
 					if( sc && sc->data[SC_ROLLINGCUTTER] )
-						skillratio += 25 * sc->data[SC_ROLLINGCUTTER]->val1;
+						skillratio += sc->data[SC_ROLLINGCUTTER]->val1 * sstatus->agi;
 					break;
 				/**
 				 * Arch Bishop
@@ -3927,7 +3929,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 		break;
 	case RK_DRAGONBREATH:
 		md.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
-		RE_LVL_MDMOD();
+		RE_LVL_MDMOD(150);
 		if (sd) md.damage = md.damage * (100 + 5 * (pc_checkskill(sd,RK_DRAGONTRAINING) - 1)) / 100;
 		md.flag |= BF_LONG|BF_WEAPON;
 		break;
@@ -3946,10 +3948,12 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 	 * Mechanic
 	 **/
 	case NC_SELFDESTRUCTION:
-		md.damage = (sd?pc_checkskill(sd,NC_MAINFRAME):10) * skill_lv * (status_get_sp(src) + sstatus->vit);
-		RE_LVL_MDMOD();
-		if (sd) md.damage = md.damage + status_get_hp(src);
-		status_set_sp(src, 0, 0);
+		{
+			short totaldef = tstatus->def2 + (short)status_get_def(target);
+			md.damage = ( (sd?pc_checkskill(sd,NC_MAINFRAME):10) + 8 ) * ( skill_lv + 1 ) * ( status_get_sp(src) + sstatus->vit );
+			RE_LVL_MDMOD(100);
+			md.damage += status_get_hp(src) - totaldef;
+		}
 		break;
 	case GN_THORNS_TRAP:
 		md.damage = 100 + 200 * skill_lv + sstatus->int_;

+ 3 - 3
src/map/config/const.h

@@ -87,9 +87,9 @@
 	#define RE_LVL_DMOD() \
 		if( status_get_lv(src) > 100 ) \
 			skillratio = skillratio * status_get_lv(src) / 100;
-	#define RE_LVL_MDMOD() \
-		if( status_get_lv(src) > 100 ) \
-			md.damage = md.damage * status_get_lv(src) / 150;
+	#define RE_LVL_MDMOD(val) \
+		if( status_get_lv(src) > 100 && val > 0) \
+			md.damage = md.damage * status_get_lv(src) / val;
 	/* ranger traps special */
 	#define RE_LVL_TMDMOD() \
 		if( status_get_lv(src) > 100 ) \

+ 1 - 0
src/map/map.c

@@ -403,6 +403,7 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick)
 		if (sc->data[SC_PROPERTYWALK] &&
 			sc->data[SC_PROPERTYWALK]->val3 >= skill_get_maxcount(sc->data[SC_PROPERTYWALK]->val1,sc->data[SC_PROPERTYWALK]->val2) )
 			status_change_end(bl,SC_PROPERTYWALK,INVALID_TIMER);
+		status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER); //If you move, you lose your counters.
 	} else
 	if (bl->type == BL_NPC)
 		npc_unsetcells((TBL_NPC*)bl);

+ 1 - 0
src/map/skill.c

@@ -7770,6 +7770,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 				 pc_setmadogear(sd, 0);
 			clif_skill_nodamage(src, bl, skillid, skilllv, 1);
 			skill_castend_damage_id(src, src, skillid, skilllv, tick, flag);
+			status_set_sp(src, 0, 0);
 		}
 		break;