Browse Source

* Updated Dancer skill's effect: Service For You / Gypsy's Kiss, according to http://irowiki.org/wiki/Gypsy%27s_Kiss
* Fixed bugreport:8363, http://rathena.org/board/tracker/issue-8363-identify/

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>

Cydh Ramdh 11 years ago
parent
commit
4ec69254c3
1 changed files with 27 additions and 6 deletions
  1. 27 6
      src/map/skill.c

+ 27 - 6
src/map/skill.c

@@ -6481,11 +6481,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 	case MC_IDENTIFY:
 		if(sd) {
 			clif_item_identify_list(sd);
-			if( sd->menuskill_id != MC_IDENTIFY ) {/* failed, dont consume anything, return */
+			if( sd->menuskill_id != MC_IDENTIFY ) {// failed, dont consume anything
 				map_freeblock_unlock();
 				return 1;
 			}
-			status_zap(src,0,skill_get_sp(skill_id,skill_lv)); // consume sp only if succeeded
+			else { // consume sp only if succeeded
+				struct skill_condition req = skill_get_requirement(sd,skill_id,skill_lv);
+				status_zap(src,0,req.sp);
+			}
 		}
 		break;
 
@@ -11527,11 +11530,22 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill
 			val1 += pc_checkskill(sd,BA_MUSICALLESSON);
 		break;
 	case DC_SERVICEFORYOU:
-		val1 = 15+skill_lv+(status->int_/10); // MaxSP percent increase TO-DO: this INT bonus value is guessed
-		val2 = 20+3*skill_lv+(status->int_/10); // SP cost reduction
 		if(sd){
-			val1 += pc_checkskill(sd,DC_DANCINGLESSON); //TO-DO This bonus value is guessed
-			val2 += pc_checkskill(sd,DC_DANCINGLESSON); //TO-DO Should be half this value
+			//val1: MaxSP percent increase
+			val1 = 15+skill_lv;
+			val1 = status->int_/10; //Bonus rate by Dancer's INT
+			
+			//val2: SP cost reduction
+			val2 = 20+3*skill_lv;
+			switch (pc_checkskill(sd,DC_DANCINGLESSON)) { //Bonus rate by DC_DANCINGLESSON
+				//LOL, looks so weird!
+				case 1: case 2: val2 += 1; break;
+				case 3: case 4: val2 += 2; break;
+				case 5: case 6: val2 += 3; break;
+				case 7: case 8: val2 += 4; break;
+				case 9: case 10: val2 += 5; break;
+			}
+			val2 += status->int_/10; //Bonus rate by Dancer's INT
 		}
 		break;
 	case BA_ASSASSINCROSS:
@@ -14327,6 +14341,13 @@ int skill_consume_requirement( struct map_session_data *sd, uint16 skill_id, uin
 	return 1;
 }
 
+/**
+* Get skill requirements and return the value after some additional/reduction condition (such item bonus and status change)
+* @param sd Player's that will be checked
+* @param skill_id Skill that's being used
+* @param skill_lv Skill level of used skill
+* @return skill_condition Struct 'skill_condition' that store the modified skill requirements
+*/
 struct skill_condition skill_get_requirement(struct map_session_data* sd, uint16 skill_id, uint16 skill_lv)
 {
 	struct skill_condition req;