Forráskód Böngészése

Fixes Death Bound to be an auto target skill (triggered on hit) - bugreport:6731
Extremity Fist SP Cap raised to work better with renewal stats - bugreport:7455
Expanded Super Novice receives +10 stat bonuses for a 0 death counter - bugreport:7394
Renewal Assassin Cross of Sunset now includes AGI into the formula - bugreport:6604
Berserk job level check works as intended - bugreport:6960

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

akinari1087 12 éve
szülő
commit
9b04ad2616
5 módosított fájl, 18 hozzáadás és 20 törlés
  1. 1 1
      db/re/skill_db.txt
  2. 5 11
      src/map/battle.c
  3. 6 2
      src/map/pc.c
  4. 2 2
      src/map/skill.c
  5. 4 4
      src/map/status.c

+ 1 - 1
db/re/skill_db.txt

@@ -692,7 +692,7 @@
 //****
 2001,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,	RK_ENCHANTBLADE,Enchant Blade
 2002,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,	RK_SONICWAVE,Sonic Wave
-2003,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,	RK_DEATHBOUND,Death Bound
+2003,0,6,4,0,0x1,0,10,1,no,0,0x200,0,weapon,0,	RK_DEATHBOUND,Death Bound
 2004,5,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0,	RK_HUNDREDSPEAR,Hundred Spear
 2005,1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3,	RK_WINDCUTTER,Wind Cutter
 2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0,	RK_IGNITIONBREAK,Ignition Break

+ 5 - 11
src/map/battle.c

@@ -2353,15 +2353,13 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 					break;
 				case NPC_DARKCROSS:
 				case CR_HOLYCROSS:
-				{
-					int ratio = 35*skill_lv;
 					#ifdef RENEWAL
 						if(sd && sd->status.weapon == W_2HSPEAR)
-							ratio *= 2;
+							skillratio += 2*(35*skill_lv);
+						else
 					#endif
-					skillratio += ratio;
+					skillratio += 35*skill_lv;
 					break;
-				}
 				case AM_DEMONSTRATION:
 					skillratio += 20*skill_lv;
 					break;
@@ -2376,12 +2374,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 					flag.pdef = flag.pdef2 = 2;
 					break;
 				case MO_EXTREMITYFIST:
-					{	//Overflow check. [Skotlex]
-						unsigned int ratio = skillratio + 100*(8 + sstatus->sp/10);
-						//You'd need something like 6K SP to reach this max, so should be fine for most purposes.
-						if (ratio > 60000) ratio = 60000; //We leave some room here in case skillratio gets further increased.
-						skillratio = (unsigned short)ratio;
-					}
+					skillratio += 100*(8 + sstatus->sp/10) - 100;
+					skillratio = min(500000,skillratio); //We stop at roughly 50k SP for overflow protection
 					break;
 				case MO_TRIPLEATTACK:
 					skillratio += 20*skill_lv;

+ 6 - 2
src/map/pc.c

@@ -1392,8 +1392,12 @@ int pc_calc_skilltree(struct map_session_data *sd)
 						}
 					}
 				}
-				if( sd->status.job_level < skill_tree[c][i].joblv )
-					f = 0; // job level requirement wasn't satisfied
+				if( sd->status.job_level < skill_tree[c][i].joblv ) { //We need to get the actual class in this case
+					int class = pc_mapid2jobid(sd->class_, sd->status.sex);
+					class = pc_class2idx(class);
+					if (class == c || (class != c && sd->status.job_level < skill_tree[class][i].joblv))
+						f = 0; // job level requirement wasn't satisfied
+				}
 			}
 
 			if( f ) {

+ 2 - 2
src/map/skill.c

@@ -10912,9 +10912,9 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill
 		}
 		break;
 	case BA_ASSASSINCROSS:
-		val1 = 100+(10*skill_lv)+(status->agi/10); // ASPD increase
+		val1 = 100+(10*skill_lv)+status->agi; // ASPD increase
 		if(sd)
-			val1 += 5*pc_checkskill(sd,BA_MUSICALLESSON);
+			val1 += 10*((pc_checkskill(sd,BA_MUSICALLESSON)+1)/2); //aspd +1% per 2lvl
 		break;
 	case DC_FORTUNEKISS:
 		val1 = 10+skill_lv+(status->luk/10); // Critical increase

+ 4 - 4
src/map/status.c

@@ -2704,7 +2704,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
 	}
 
 	// If a Super Novice has never died and is at least joblv 70, he gets all stats +10
-	if((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->die_counter == 0 && sd->status.job_level >= 70){
+	if(((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && (sd->status.job_level >= 70  || sd->class_&JOBL_THIRD)) && sd->die_counter == 0){
 		status->str += 10;
 		status->agi += 10;
 		status->vit += 10;
@@ -5342,10 +5342,10 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s
 			skills1 = 5;
 
 		if(sc->data[SC_ASSNCROS] &&
-			skills1 < 5+1*sc->data[SC_ASSNCROS]->val1) // needs more info
+			skills1 < sc->data[SC_ASSNCROS]->val2/10)
 		{
 			if (bl->type!=BL_PC)
-				skills1 = 4+1*sc->data[SC_ASSNCROS]->val1;
+				skills1 = sc->data[SC_ASSNCROS]->val2/10;
 			else
 			switch(((TBL_PC*)bl)->status.weapon)
 			{
@@ -5357,7 +5357,7 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s
 				case W_GRENADE:
 					break;
 				default:
-					skills1 = 5+1*sc->data[SC_ASSNCROS]->val1;
+					skills1 = sc->data[SC_ASSNCROS]->val2/10;
 			}
 		}
 	}