Ver Fonte

Fixed max HP/SP of extended classes in pre-re
- Fixed max HP/SP of extended classes being way too low in pre-renewal (related to #358)
* It's impossible to make it 100% accurate without tables, but I made it as accurate as possible for now
* More updates to max HP/SP will follow when I have time

Playtester há 10 anos atrás
pai
commit
df2f850c74
2 ficheiros alterados com 25 adições e 5 exclusões
  1. 4 4
      db/pre-re/job_db1.txt
  2. 21 1
      src/map/pc.c

+ 4 - 4
db/pre-re/job_db1.txt

@@ -52,9 +52,9 @@
 // Super Novice
 23,	20000,0    ,500  ,100  ,500  ,650  ,700  ,2000 ,2000 ,2000 ,800  ,2000 ,700  ,700  ,650  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
 // Gunslinger
-24,	28000,75   ,  0  ,400  ,500  ,2000, 2000, 2000, 2000, 2000, 2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700 , 750 , 700 ,1500 ,1500 ,2000 ,2000
+24,	28000,89   ,  0  ,462  ,500  ,2000, 2000, 2000, 2000, 2000, 2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700 , 750 , 700 ,1500 ,1500 ,2000 ,2000
 // Ninja
-25,	26000,80   ,  0  ,300  ,400  ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 750 ,2000
+25,	26000,80   ,  0  ,530  ,400  ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 750 ,2000
 // Novice High
 4001,	20000,0    ,500  ,100  ,500  ,650  ,700  ,2000 ,2000 ,2000 ,800  ,2000 ,700  ,700  ,650  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
 // Swordman High
@@ -148,9 +148,9 @@
 // Taekwon
 4046, 28000,70   ,500  ,200  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 // Star Gladiator
-4047, 28000,90   ,650  ,400  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+4047, 28000,90   ,650  ,470  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 // Star Gladiator (Union)
-4048, 28000,90   ,650  ,400  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+4048, 28000,90   ,650  ,470  ,400  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
 // Soul Linker
 4049, 24000,75   ,500  ,900  ,500  ,575  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625 
 //================================

+ 21 - 1
src/map/pc.c

@@ -10478,11 +10478,31 @@ static unsigned int pc_calc_basehp(uint16 level, uint16 class_idx) {
 	uint16 i;
 
 	base_hp = 35 + level * (job_info[class_idx].hp_multiplicator/100.);
+#ifndef RENEWAL
+	if(level >= 10 && (class_idx == JOB_NINJA || class_idx == JOB_GUNSLINGER)) base_hp += 90;
+#endif
 	for (i = 2; i <= level; i++)
 		base_hp += floor(((job_info[class_idx].hp_factor/100.) * i) + 0.5); //Don't have round()
 	return (unsigned int)base_hp;
 }
 
+/** [Playter]
+* Calculates base sp of player.
+* @param level Base level of player
+* @param idx Index of class
+* @return base_sp
+*/
+static unsigned int pc_calc_basesp(uint16 level, uint16 class_idx) {
+	double base_sp;
+
+	base_sp = 10 + floor(level * (job_info[class_idx].sp_factor / 100.));
+#ifndef RENEWAL
+	if(level >= 10 && class_idx == JOB_NINJA) base_sp -= 20;
+	if(level >= 10 && class_idx == JOB_GUNSLINGER) base_sp -= 17;
+#endif
+	return (unsigned int)base_sp;
+}
+
 //Reading job_db1.txt line, (class,weight,HPFactor,HPMultiplicator,SPFactor,aspd/lvl...)
 static bool pc_readdb_job1(char* fields[], int columns, int current){
 	int idx, class_;
@@ -10850,7 +10870,7 @@ void pc_readdb(void) {
 			if (job_info[idx].base_hp[j] == 0)
 				job_info[idx].base_hp[j] = pc_calc_basehp(j+1,idx);
 			if (job_info[idx].base_sp[j] == 0)
-				job_info[idx].base_sp[j] = 10 + (unsigned int)floor((j+1) * (job_info[idx].sp_factor / 100.));
+				job_info[idx].base_sp[j] = pc_calc_basesp(j+1,idx);
 		}
 	}
 }