Browse Source

Fixed bugreport:6650 where WZ_QUAGMIRE affects caster in non PK map.
Fixed bugreport:6635 where SO_FIREWALK & SO_ELECTRIC walk still active after changing map.
Updated EDP to it's Renewal damage formula bonus.
NOTE: result damage still quite huge than official since renewal atk is not yet fully implemented.

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

rud0lp20 12 years ago
parent
commit
82538ca8d4
4 changed files with 15 additions and 14 deletions
  1. 7 3
      src/map/battle.c
  2. 1 0
      src/map/pc.c
  3. 1 1
      src/map/skill.c
  4. 6 10
      src/map/status.c

+ 7 - 3
src/map/battle.c

@@ -2632,10 +2632,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 				  skill_num == LG_SHIELDPRESS ) )
 				  skill_num == LG_SHIELDPRESS ) )
 				ATK_ADDRATE(sc->data[SC_GLOOMYDAY_SK]->val2);
 				ATK_ADDRATE(sc->data[SC_GLOOMYDAY_SK]->val2);
 			if( sc->data[SC_EDP] ){
 			if( sc->data[SC_EDP] ){
-			// FIX ME: Should Rolling Cutter be affected by EDP?
 				switch(skill_num){
 				switch(skill_num){
 					case AS_SPLASHER:       case AS_VENOMKNIFE:
 					case AS_SPLASHER:       case AS_VENOMKNIFE:
-					case AS_GRIMTOOTH:      case GC_ROLLINGCUTTER:
+					case AS_GRIMTOOTH:      
 					break;
 					break;
 #ifndef RENEWAL_EDP
 #ifndef RENEWAL_EDP
 					case ASC_BREAKER:       case ASC_METEORASSAULT: break;
 					case ASC_BREAKER:       case ASC_METEORASSAULT: break;
@@ -3070,7 +3069,12 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 
 
 			if( wd.flag&BF_LONG )
 			if( wd.flag&BF_LONG )
 				cardfix = cardfix * ( 100 + sd->bonus.long_attack_atk_rate ) / 100;
 				cardfix = cardfix * ( 100 + sd->bonus.long_attack_atk_rate ) / 100;
-
+#ifdef RENEWAL_EDP
+			if( sc && sc->data[SC_EDP] ){
+				cardfix = cardfix * (100 + sc->data[SC_EDP]->val1 * 60 ) / 100;
+				cardfix_ = cardfix_ * (100 + sc->data[SC_EDP]->val1 * 60 ) / 100;
+			}
+#endif
 			if( cardfix != 1000 || cardfix_ != 1000 )
 			if( cardfix != 1000 || cardfix_ != 1000 )
 				ATK_RATE2(cardfix/10, cardfix_/10);	//What happens if you use right-to-left and there's no right weapon, only left?
 				ATK_RATE2(cardfix/10, cardfix_/10);	//What happens if you use right-to-left and there's no right weapon, only left?
 		}
 		}

+ 1 - 0
src/map/pc.c

@@ -4589,6 +4589,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
 					delete_timer(sce->timer, status_change_timer);
 					delete_timer(sce->timer, status_change_timer);
 				sce->timer = add_timer(gettick() + skill_get_time(SG_KNOWLEDGE, sce->val1), status_change_timer, sd->bl.id, SC_KNOWLEDGE);
 				sce->timer = add_timer(gettick() + skill_get_time(SG_KNOWLEDGE, sce->val1), status_change_timer, sd->bl.id, SC_KNOWLEDGE);
 			}
 			}
+			status_change_end(&sd->bl, SC_PROPERTYWALK, INVALID_TIMER);
 		}
 		}
 		for( i = 0; i < EQI_MAX; i++ ) {
 		for( i = 0; i < EQI_MAX; i++ ) {
 			if( sd->equip_index[ i ] >= 0 )
 			if( sd->equip_index[ i ] >= 0 )

+ 1 - 1
src/map/skill.c

@@ -10839,7 +10839,7 @@ static int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, un
 		break;
 		break;
 
 
 	case UNT_QUAGMIRE:
 	case UNT_QUAGMIRE:
-		if(!sce)
+		if( !sce && battle_check_target(&sg->unit->bl,bl,sg->target_flag) > 0 )
 			sc_start4(bl,type,100,sg->skill_lv,sg->group_id,0,0,sg->limit);
 			sc_start4(bl,type,100,sg->skill_lv,sg->group_id,0,0,sg->limit);
 		break;
 		break;
 
 

+ 6 - 10
src/map/status.c

@@ -968,8 +968,8 @@ void initChangeTables(void) {
 	StatusChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD;	
 	StatusChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD;	
 
 
 #ifdef RENEWAL_EDP
 #ifdef RENEWAL_EDP
-	// renewal EDP increases your atk and weapon atk
-	StatusChangeFlagTable[SC_EDP] |= SCB_BATK|SCB_WATK;
+	// renewal EDP increases your weapon atk
+	StatusChangeFlagTable[SC_EDP] |= SCB_WATK;
 #endif
 #endif
 	
 	
 	if( !battle_config.display_hallucination ) //Disable Hallucination.
 	if( !battle_config.display_hallucination ) //Disable Hallucination.
@@ -4399,11 +4399,6 @@ static unsigned short status_calc_batk(struct block_list *bl, struct status_chan
 		batk += 70;
 		batk += 70;
 	if(sc->data[SC_ANGRIFFS_MODUS])
 	if(sc->data[SC_ANGRIFFS_MODUS])
 		batk += batk * sc->data[SC_ANGRIFFS_MODUS]->val2/100;
 		batk += batk * sc->data[SC_ANGRIFFS_MODUS]->val2/100;
-#ifdef RENEWAL_EDP
-	// renewal EDP increases your base atk by atk x skill level
-	if( sc->data[SC_EDP] )
-		batk = batk * sc->data[SC_EDP]->val1;
-#endif	
 	if( sc->data[SC_ZANGETSU] )
 	if( sc->data[SC_ZANGETSU] )
 		batk += batk * sc->data[SC_ZANGETSU]->val2 / 100;
 		batk += batk * sc->data[SC_ZANGETSU]->val2 / 100;
 	return (unsigned short)cap_value(batk,0,USHRT_MAX);
 	return (unsigned short)cap_value(batk,0,USHRT_MAX);
@@ -4487,9 +4482,8 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan
 	if(sc->data[SC_ANGRIFFS_MODUS])
 	if(sc->data[SC_ANGRIFFS_MODUS])
 		watk += watk * sc->data[SC_ANGRIFFS_MODUS]->val2/100;
 		watk += watk * sc->data[SC_ANGRIFFS_MODUS]->val2/100;
 #ifdef RENEWAL_EDP
 #ifdef RENEWAL_EDP
-	// renewal EDP increases your weapon atk by watk x Skill Level - 1
-	if( sc->data[SC_EDP] && sc->data[SC_EDP]->val1 > 1 )
-		watk = watk * (sc->data[SC_EDP]->val1 - 1);
+	if( sc->data[SC_EDP] )
+		watk = watk * (100 + sc->data[SC_EDP]->val1 * 80) / 100;
 #endif
 #endif
 
 
 	return (unsigned short)cap_value(watk,0,USHRT_MAX);
 	return (unsigned short)cap_value(watk,0,USHRT_MAX);
@@ -6983,7 +6977,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			break;
 			break;
 		case SC_EDP:	// [Celest]
 		case SC_EDP:	// [Celest]
 			val2 = val1 + 2; //Chance to Poison enemies.
 			val2 = val1 + 2; //Chance to Poison enemies.
+#ifndef RENEWAL_EDP
 			val3 = 50*(val1+1); //Damage increase (+50 +50*lv%)
 			val3 = 50*(val1+1); //Damage increase (+50 +50*lv%)
+#endif
 			if( sd )//[Ind] - iROwiki says each level increases its duration by 3 seconds
 			if( sd )//[Ind] - iROwiki says each level increases its duration by 3 seconds
 				tick += pc_checkskill(sd,GC_RESEARCHNEWPOISON)*3000;
 				tick += pc_checkskill(sd,GC_RESEARCHNEWPOISON)*3000;
 			break;
 			break;