소스 검색

Follow up r16738 MO_ETREMITYFIST renewal behavior.
Fixed bugreport:6580 where SC_MANHOLE targets can use items.
Fixed bugreport:6636 a typo formula in WL_WHITEIMPRISON.
Fixed bugreport:6685 a missing column in skill_cast_db.txt for WL_COMET entry.


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

rud0lp20 12 년 전
부모
커밋
5db62f5c84
6개의 변경된 파일56개의 추가작업 그리고 51개의 파일을 삭제
  1. 30 30
      db/re/skill_cast_db.txt
  2. 3 8
      src/map/pc.c
  3. 2 8
      src/map/script.c
  4. 9 2
      src/map/skill.c
  5. 9 3
      src/map/status.c
  6. 3 0
      src/map/status.h

+ 30 - 30
db/re/skill_cast_db.txt

@@ -411,7 +411,7 @@
 //-- MO_EXPLOSIONSPIRITS
 270,0,0,0,180000,0,0,0
 //-- MO_EXTREMITYFIST
-271,4000:3500:3000:2500:2000,3000:2500:2000:1500:1000,0,0,300000,0,0
+271,4000:3500:3000:2500:2000,3000:2500:2000:1500:1000,0,10000,300000,0,0
 //-- MO_CHAINCOMBO
 272,0,1000,0,0,0,0,0
 //-- MO_COMBOFINISH
@@ -1211,7 +1211,7 @@
 //-- WL_HELLINFERNO
 2212,3000,1000,0,15000,0,0,1000
 //-- WL_COMET 
-2213,10000:11000:12000:13000:14000,0,15000,0,60000,1000:1500:2000:2500:3000
+2213,10000:11000:12000:13000:14000,0,0,15000,0,60000,1000:1500:2000:2500:3000
 //-- WL_CHAINLIGHTNING 
 2214,3500:4000:4500:5000:5500,0,0,100,0,3000,1000
 
@@ -1837,61 +1837,61 @@
 
 //===== Elemental Skills =======================
 //-- EL_CIRCLE_OF_FIRE
-8401,0,0,0,-1,0,0
+8401,0,0,0,-1,0,0,-1
 //-- EL_FIRE_CLOAK
-8402,0,0,0,-1,0,0
+8402,0,0,0,-1,0,0,-1
 //-- EL_FIRE_MANTLE
-8403,0,0,0,15000,0,0
+8403,0,0,0,15000,0,0,-1
 //-- EL_WATER_SCREEN
-8404,0,0,0,-1,0,0
+8404,0,0,0,-1,0,0,-1
 //-- EL_WATER_DROP
-8405,0,0,0,-1,0,0
+8405,0,0,0,-1,0,0,-1
 //-- EL_WATER_BARRIER
-8406,1000,0,0,15000,0,0
+8406,1000,0,0,15000,0,0,-1
 //-- EL_WIND_STEP
-8407,0,0,0,-1,0,0
+8407,0,0,0,-1,0,0,-1
 //-- EL_WIND_CURTAIN
-8408,0,0,0,-1,0,0
+8408,0,0,0,-1,0,0,-1
 //-- EL_ZEPHYR
-8409,0,0,0,15000,0,0
+8409,0,0,0,15000,0,0,-1
 //-- EL_STONE_SHIELD
-8411,0,0,0,-1,0,0
+8411,0,0,0,-1,0,0,-1
 //-- EL_POWER_OF_GAIA
-8412,0,0,0,15000,0,0
+8412,0,0,0,15000,0,0,-1
 //-- EL_PYROTECHNIC
-8413,0,0,0,-1,0,0
+8413,0,0,0,-1,0,0,-1
 //-- EL_HEATER
-8414,0,0,0,-1,0,0
+8414,0,0,0,-1,0,0,-1
 //-- EL_TROPIC
-8415,0,0,0,-1,0,0
+8415,0,0,0,-1,0,0,-1
 //-- EL_AQUAPLAY
-8416,0,0,0,-1,0,0
+8416,0,0,0,-1,0,0,-1
 //-- EL_COOLER
-8417,0,0,0,-1,0,0
+8417,0,0,0,-1,0,0,-1
 //-- EL_CHILLY_AIR
-8418,0,0,0,-1,0,0
+8418,0,0,0,-1,0,0,-1
 //-- EL_GUST
-8419,0,0,0,-1,0,0
+8419,0,0,0,-1,0,0,-1
 //-- EL_BLAST
-8420,0,0,0,-1,0,0
+8420,0,0,0,-1,0,0,-1
 //-- EL_WILD_STORM
-8421,0,0,0,-1,0,0
+8421,0,0,0,-1,0,0,-1
 //-- EL_PETROLOGY
-8422,0,0,0,-1,0,0
+8422,0,0,0,-1,0,0,-1
 //-- EL_CURSED_SOIL
-8423,0,0,0,-1,0,0
+8423,0,0,0,-1,0,0,-1
 //-- EL_UPHEAVAL
-8424,0,0,0,-1,0,0
+8424,0,0,0,-1,0,0,-1
 //-- EL_TIDAL_WEAPON
-8433,0,0,0,-1,0,0
+8433,0,0,0,-1,0,0,-1
 //-- EL_TYPOON_MIS
-8437,0,0,0,15000,0,0
+8437,0,0,0,15000,0,0,-1
 //-- EL_STONE_HAMMER
-8439,0,0,0,5000,0,0
+8439,0,0,0,5000,0,0,-1
 //-- EL_ROCK_CRUSHER
-8440,0,0,0,15000,0,0
+8440,0,0,0,15000,0,0,-1
 //-- EL_ROCK_CRUSHER_ATK
-8441,0,0,0,15000,0,0
+8441,0,0,0,15000,0,0,-1
 //==========================================
 
 //===== Guild Skills =======================

+ 3 - 8
src/map/pc.c

@@ -4145,6 +4145,7 @@ int pc_useitem(struct map_session_data *sd,int n)
 		sd->sc.data[SC_TRICKDEAD] ||
 		sd->sc.data[SC_HIDING] ||
 		sd->sc.data[SC__SHADOWFORM] ||
+		sd->sc.data[SC__MANHOLE] ||
 		sd->sc.data[SC_KAGEHUMI] ||
 		(sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOITEM)
 	))
@@ -6957,14 +6958,8 @@ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp)
 			sp += sp / 10;
 		}
 #ifdef RENEWAL
-		if( sd->sc.data[SC_EXTREMITYFIST] ){
-			const struct TimerData *timer;
-			int tick = skill_get_time2(MO_EXTREMITYFIST, sd->sc.data[SC_EXTREMITYFIST]->val1);
-
-			timer = get_timer(sd->sc.data[SC_EXTREMITYFIST]->timer);
-			if( DIFF_TICK(tick, DIFF_TICK(timer->tick, gettick())) < 10000 )// 10 sec
-				sp = 0;
-		}
+		if( sd->sc.data[SC_EXTREMITYFIST2] )
+			sp = 0;
 #endif
 	}
 

+ 2 - 8
src/map/script.c

@@ -5351,14 +5351,8 @@ BUILDIN_FUNC(percentheal)
 	if( sd == NULL )
 		return 0;
 #ifdef RENEWAL
-	if( sd->sc.data[SC_EXTREMITYFIST] ){
-		const struct TimerData *timer;
-		int tick = skill_get_time2(MO_EXTREMITYFIST, sd->sc.data[SC_EXTREMITYFIST]->val1);
-
-		timer = get_timer(sd->sc.data[SC_EXTREMITYFIST]->timer);
-		if( DIFF_TICK(tick, DIFF_TICK(timer->tick, gettick())) < 10000 )// 10 sec
-			sp = 0;
-	}
+	if( sd->sc.data[SC_EXTREMITYFIST2] )
+		sp = 0;
 #endif
 	pc_percentheal(sd,hp,sp);
 	return 0;

+ 9 - 2
src/map/skill.c

@@ -1700,7 +1700,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
 
 	switch(skillid){
 	case MO_EXTREMITYFIST:
-		sc_start(src,status_skill2sc(skillid),100,skilllv,skill_get_time2(skillid,skilllv));
+		sc_start(src,SC_EXTREMITYFIST,100,skilllv,skill_get_time2(skillid,skilllv));
 		break;
 	case GS_FULLBUSTER:
 		sc_start(src,SC_BLIND,2*skilllv,skilllv,skill_get_time2(skillid,skilllv));
@@ -3634,6 +3634,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 		{
 			status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
 			status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
+#ifdef RENEWAL
+			sc_start(src,SC_EXTREMITYFIST2,100,skilllv,skill_get_time(skillid,skilllv));
+#endif
 		}
 		//Client expects you to move to target regardless of distance
 		{
@@ -17497,7 +17500,11 @@ static void skill_readdb(void)
 
 	sv_readdb(db_path, DBPATH"skill_db.txt"          , ',',  17, 17, MAX_SKILL_DB, skill_parse_row_skilldb);
 	sv_readdb(db_path, DBPATH"skill_require_db.txt"  , ',',  32, 32, MAX_SKILL_DB, skill_parse_row_requiredb);
-	sv_readdb(db_path, DBPATH"skill_cast_db.txt"     , ',',   7,  8, MAX_SKILL_DB, skill_parse_row_castdb);
+#ifdef RENEWAL
+	sv_readdb(db_path, "re/skill_cast_db.txt"     , ',',   8,  8, MAX_SKILL_DB, skill_parse_row_castdb);
+#else
+	sv_readdb(db_path, "re-pre/skill_cast_db.txt"     , ',',   7,  7, MAX_SKILL_DB, skill_parse_row_castdb);
+#endif
 	sv_readdb(db_path, DBPATH"skill_castnodex_db.txt", ',',   2,  3, MAX_SKILL_DB, skill_parse_row_castnodexdb);
 	sv_readdb(db_path, DBPATH"skill_unit_db.txt"     , ',',   8,  8, MAX_SKILL_DB, skill_parse_row_unitdb);
 

+ 9 - 3
src/map/status.c

@@ -312,7 +312,10 @@ void initChangeTables(void) {
 	add_sc( MO_BLADESTOP         , SC_BLADESTOP_WAIT  );
 	add_sc( MO_BLADESTOP         , SC_BLADESTOP       );
 	set_sc( MO_EXPLOSIONSPIRITS  , SC_EXPLOSIONSPIRITS, SI_EXPLOSIONSPIRITS, SCB_CRI|SCB_REGEN );
-	set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST   , SI_EXTREMITYFIST           , SCB_REGEN );
+	set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST   , SI_BLANK           , SCB_REGEN );
+#ifdef RENEWAL
+	set_sc( MO_EXTREMITYFIST     , SC_EXTREMITYFIST2   , SI_EXTREMITYFIST   , SCB_NONE );
+#endif
 	add_sc( SA_MAGICROD          , SC_MAGICROD        );
 	set_sc( SA_AUTOSPELL         , SC_AUTOSPELL       , SI_AUTOSPELL       , SCB_NONE );
 	set_sc( SA_FLAMELAUNCHER     , SC_FIREWEAPON      , SI_FIREWEAPON      , SCB_ATK_ELE );
@@ -6079,8 +6082,11 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
 		rate -= (status_get_lv(bl) / 5 + status->vit / 4 + status->agi / 10)*100; // Lineal Reduction of Rate
 		break;
 	case SC_WHITEIMPRISON:
-		rate -= (status_get_lv(bl) / 5 + status->vit / 4 + status->agi / 10)*100; 
-		if( tick != 5000) // not applied on caster
+		if( tick == 5000 ) // 100% on caster
+			break;
+		if( bl->type == BL_PC )
+			tick -= (status_get_lv(bl) / 5 + status->vit / 4 + status->agi / 10)*100; 
+		else
 			tick -= (status->vit + status->luk) / 20 * 1000; 
 		break;
 	case SC_BURNING:

+ 3 - 0
src/map/status.h

@@ -635,6 +635,9 @@ typedef enum sc_type {
 	SC_ZANGETSU,
 	SC_GENSOU,
 	SC_AKAITSUKI,
+#ifdef RENEWAL	
+	SC_EXTREMITYFIST2,
+#endif
 
 	SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
 } sc_type;