浏览代码

* Corrected Investigate's damage calculation
* Generate the remaining entries of the stat point DB if the number of entries in db/statuspoints.txt is less than MAX_LEVEL, or statuspoints.txt was not found
* Try to spawn the player at a default map ("prontera.gat") when logging in if the save point map was not found

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

celest 20 年之前
父节点
当前提交
d68621fd8c
共有 3 个文件被更改,包括 38 次插入17 次删除
  1. 8 0
      Changelog-SVN.txt
  2. 4 4
      src/map/battle.c
  3. 26 13
      src/map/pc.c

+ 8 - 0
Changelog-SVN.txt

@@ -1,5 +1,13 @@
 Date	Added
 
+02/15
+        * Corrected Investigate's damage calculation, thanks to matthias [celest]
+        * Generate the remaining entries of the stat point DB if the number of
+          entries in db/statuspoints.txt is less than MAX_LEVEL, or statuspoints.txt
+          was not found [celest]
+        * Try to spawn the player at a default map ("prontera.gat") when logging in if
+          the save point map was not found [celest]
+
 02/13
         * added an @autoloot switch that Upa-kun has forgotten [Shinomori]
         * changed pet_skillattack_timer and corrected the poison spore attack

+ 4 - 4
src/map/battle.c

@@ -864,7 +864,7 @@ static struct Damage battle_calc_pet_weapon_attack(
 				break;
 			case MO_INVESTIGATE:	// ”­ ™¤
 				if(def1 < 1000000)
-					damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100;
+					damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/50;
 				hitrate = 1000000;
 				s_ele = 0;
 				break;
@@ -1366,7 +1366,7 @@ static struct Damage battle_calc_mob_weapon_attack(
 				break;
 			case MO_INVESTIGATE:	// ”­ ™¤
 				if(def1 < 1000000)
-					damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100;
+					damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/50;
 				hitrate = 1000000;
 				s_ele = 0;
 				break;
@@ -2173,8 +2173,8 @@ static struct Damage battle_calc_pc_weapon_attack(
 				break;
 			case MO_INVESTIGATE:	// ”­ ™¤
 				if(def1 < 1000000) {
-					damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100;
-					damage2 = damage2*(100+ 75*skill_lv)/100 * (def1 + def2)/100;
+					damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/50;
+					damage2 = damage2*(100+ 75*skill_lv)/100 * (def1 + def2)/50;
 				}
 				hitrate = 1000000;
 				s_ele = 0;

+ 26 - 13
src/map/pc.c

@@ -766,6 +766,12 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars
 			sprintf(buf, "Last_point_map %s not found\n", sd->status.last_point.map);
 			ShowError (buf);
 		}
+		// try warping to a default map instead
+		if (pc_setpos(sd, "prontera.gat", 273, 354, 0) != 0) {
+			// if we fail again
+			clif_authfail_fd(sd->fd, 0);
+			return 1;
+		}
 	}
 
 	// pet
@@ -6861,22 +6867,29 @@ int pc_readdb(void)
 
 	// ƒXƒLƒ‹ƒcƒŠ?
 	memset(statp,0,sizeof(statp));
+	i=0;
+	j=45;	// base points
 	fp=fopen("db/statpoint.txt","r");
-	if(fp==NULL){
-		printf("can't read db/statpoint.txt\n");
-		return 1;
+	if(fp == NULL){
+		sprintf(tmp_output,"Can't read '"CL_WHITE"%s"CL_RESET"'... Generating DB.\n","db/statpoint.txt");
+		//return 1;
+	} else {
+		while(fgets(line, sizeof(line)-1, fp)){
+			if(line[0]=='/' && line[1]=='/')
+				continue;
+			if ((j=atoi(line))<0)
+				j=0;
+			statp[i]=j;			
+			i++;
+		}
+		fclose(fp);
+		sprintf(tmp_output,"Done reading '"CL_WHITE"%s"CL_RESET"'.\n","db/statpoint.txt");
 	}
-	i=0;
-	while(fgets(line, sizeof(line)-1, fp)){
-		if(line[0]=='/' && line[1]=='/')
-			continue;
-		if ((j=atoi(line))<0)
-			j=0;
-		statp[i]=j;
-		i++;
+	// generate the remaining parts of the db if necessary
+	for (; i < MAX_LEVEL; i++) {
+		j += (i+15)/5;
+		statp[i] = j;		
 	}
-	fclose(fp);
-	sprintf(tmp_output,"Done reading '"CL_WHITE"%s"CL_RESET"'.\n","db/statpoint.txt");
 	ShowStatus(tmp_output);
 
 	return 0;