ソースを参照

Fixed some skills working on undead element when they were supposed to work on undead race.
Skills Fixed: GrandCross, Dark GrandCross, Cure, Head Crush, Signum Crusis, Blessing, Demons Bane, Divine Protection.
Skills needing confirmation: Magnus Exorcismus, Evil Land, Sanctuary, Status Recovery.

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

shadow 17 年 前
コミット
a80253d14f
5 ファイル変更24 行追加17 行削除
  1. 7 0
      Changelog-Trunk.txt
  2. 2 2
      src/map/battle.c
  3. 1 1
      src/map/pc.c
  4. 9 9
      src/map/skill.c
  5. 5 5
      src/map/status.c

+ 7 - 0
Changelog-Trunk.txt

@@ -4,6 +4,13 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 
+2008/06/13
+	* Corrected dc_serviceforyou bonus values based on irowiki (better have fansite info than 100% guessed info).
+	* Fixed dc_humming only recieving half the bonus from dancing lessons.
+	* Fixed some skills working on undead element when they were supposed to work on undead race. [Brainstorm]
+		Skills Fixed: Cure, Signum Crusis, Blessing, Demons Bane, Divine Protection.
+		Skills needing confirmation: Magnus Exorcismus, Evil Land, Sanctuary, Status Recovery, GrandCross, Dark GrandCross, Head Crush
+
 2008/06/12
 	* Added check to prevent crashing on logmes with no player attached
 	  (bugreport:1648) [ultramage]

+ 2 - 2
src/map/battle.c

@@ -614,7 +614,7 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int
 	nullpo_retr(0, sd);
 
 	if((skill = pc_checkskill(sd,AL_DEMONBANE)) > 0 &&
-		(battle_check_undead(status->race,status->def_ele) || status->race==RC_DEMON) )
+		(status->race==RC_UNDEAD || status->race==RC_DEMON) )
 		damage += (skill*(int)(3+(sd->status.base_level+1)*0.05));	// submitted by orn
 		//damage += (skill * 3);
 
@@ -1713,7 +1713,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 				vit_def = def2*(def2-15)/150;
 				vit_def = def2/2 + (vit_def>0?rand()%vit_def:0);
 				
-				if((battle_check_undead(sstatus->race,sstatus->def_ele) || sstatus->race==RC_DEMON) &&
+				if((sstatus->race==RC_UNDEAD || sstatus->race==RC_DEMON) &&
 					src->type == BL_MOB && (skill=pc_checkskill(tsd,AL_DP)) > 0)
 					vit_def += skill*(int)(3 +(tsd->status.base_level+1)*0.04);   // submitted by orn
 			} else { //Mob-Pet vit-eq

+ 1 - 1
src/map/pc.c

@@ -6558,7 +6558,7 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag)
 		status_calc_pc(sd,0);
 	}
 
-	if(sd->sc.data[SC_SIGNUMCRUCIS] && !battle_check_undead(sd->battle_status.race,sd->battle_status.def_ele))
+	if(sd->sc.data[SC_SIGNUMCRUCIS] && (sd->battle_status.race != RC_UNDEAD))
 		status_change_end(&sd->bl,SC_SIGNUMCRUCIS,-1);
 
 	//OnUnEquip script [Skotlex]

+ 9 - 9
src/map/skill.c

@@ -3903,8 +3903,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 		status_change_end(bl, SC_SILENCE	, -1 );
 		status_change_end(bl, SC_BLIND	, -1 );
 		status_change_end(bl, SC_CONFUSION, -1 );
-		//Confusion on undead won't trigger on undead players.
-		if(!dstsd && battle_check_undead(tstatus->race,tstatus->def_ele))
+		//Confusion status will trigger against undead race.
+		if(tstatus->race==RC_UNDEAD)
 			sc_start(bl, SC_CONFUSION,100,1,skill_get_time2(skillid, skilllv));
 		clif_skill_nodamage(src,bl,skillid,skilllv,1);
 		break;
@@ -6297,7 +6297,7 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
 	case DC_HUMMING:
         val1 = 2*skilllv+status->dex/10; // Hit increase
 		if(sd)
-			val1 += 2*pc_checkskill(sd,DC_DANCINGLESSON);
+			val1 += pc_checkskill(sd,DC_DANCINGLESSON);
 		break;
 	case BA_POEMBRAGI:
 		val1 = 3*skilllv+status->dex/10; // Casting time reduction
@@ -6312,8 +6312,8 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
 		val1 = 30*skilllv+status->dex; // ASPD decrease
 		val2 = 100 -2*skilllv -status->agi/10; // Movement speed adjustment.
 		if(sd){
-			val1 += pc_checkskill(sd,DC_DANCINGLESSON);
-			val2 -= pc_checkskill(sd,DC_DANCINGLESSON);
+			val1 += pc_checkskill(sd,DC_DANCINGLESSON); //TO-DO This is a guessed value
+			val2 -= pc_checkskill(sd,DC_DANCINGLESSON); //TO-DO This is a guessed value
 		}
 		if (val2 < 1) val2 = 1;
 		break;
@@ -6328,11 +6328,11 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
 		}
 		break;
 	case DC_SERVICEFORYOU:
-		val1 = 10+skilllv+(status->int_/10); // MaxSP percent increase
-		val2 = 10+3*skilllv+(status->int_/10); // SP cost reduction
+		val1 = 15+skilllv+(status->int_/10); // MaxSP percent increase TO-DO: this INT bonus value is guessed
+		val2 = 20+3*skilllv+(status->int_/10); // SP cost reduction
 		if(sd){
-			val1 += pc_checkskill(sd,DC_DANCINGLESSON);
-			val2 += pc_checkskill(sd,DC_DANCINGLESSON);
+			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
 		}
 		break;
 	case BA_ASSASSINCROSS:

+ 5 - 5
src/map/status.c

@@ -4672,8 +4672,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			return 0; //Cannot override other opt1 status changes. [Skotlex]
 	break;
 	case SC_SIGNUMCRUCIS:
-		//Only affects demons and undead.
-		if(status->race != RC_DEMON && !undead_flag)
+		//Only affects demons and undead races
+		if(status->race!=RC_UNDEAD && status->race!=RC_DEMON)
 			return 0;
 	break;
 	case SC_AETERNA:
@@ -4818,7 +4818,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			 return 0;
 		 switch (type) {
 			case SC_BLESSING:
-			  if (!undead_flag && status->race != RC_DEMON)
+			  if (status->race!=RC_UNDEAD && status->race!=RC_DEMON)
 				  break;
 			case SC_QUAGMIRE:
 			case SC_DECREASEAGI:
@@ -4842,7 +4842,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 	case SC_BLESSING:
 		//TO-DO Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM
 		//but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm]
-		if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) {
+		if (status->race!=RC_UNDEAD && status->race!=RC_DEMON) {
 			if (sc->data[SC_CURSE])
 				status_change_end(bl,SC_CURSE,-1);
 			if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
@@ -5717,7 +5717,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			val4 = -1;	//Kaahi Timer.
 			break;
 		case SC_BLESSING:
-			if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC)
+			if (status->race!=RC_UNDEAD && status->race!=RC_DEMON)
 				val2 = val1;
 			else
 				val2 = 0; //0 -> Half stat.